다음과 같은 데이터 프레임이 있습니다 (reshape2 :: cast 및 merge 사용).
time days treatment extrafactor1 extrafactor2 extrafactor3 animal1 animal2 animal3
10 83 control B water 2 2 67 40
10 83 control B water 3 50 67 39
10 83 control A water 3 22 80 63
10 83 control A water 2 40 40 100
10 83 treated A water 3 40 69 92
10 83 treated A water 1 64 56 6
10 83 treated A water 2 90 67 52
10 83 treated B water 2 14 36 77
10 83 treated B water 3 41 83 55
10 83 treated B water 1 66 31 51
11 86 control B water 1 99 100 10
11 86 control B water 2 23 27 22
11 86 control A water 3 57 10 65
11 86 control A water 1 60 2 49
11 86 control A water 2 23 14 44
11 86 control B water 3 97 45 20
11 86 treated B water 2 71 15 24
11 86 treated B water 3 49 55 63
11 86 treated A water 3 54 88 27
처리 된 샘플에서 대조군 샘플의 다른 동물의 값을 빼고 싶습니다. 물론 빼기는 다른 요소의 수준이 일치하는 곳에서 발생하므로 "11_86_ 치료 _A_water_3"의 animal1- 값은 "11_86_control_A_water_3"의 animal1- 값, 각 동물에 대해 감소해야합니다. 나는 plyr로 몇 가지 시도해 왔습니다.
df2 <- ddply(df, .(time,days,treatment,extrafactor1,extrafactor2,extrafactor3), transform, animal1 = animal1-animal1[treatment=="control"])
그러나 그것은 나에게 많은 NA를 주었고 내가 갖고 싶은 것을 적절하게 실행하기 위해 누락 된 정보가 있다고 확신합니다. 실제로 수백 마리의 동물이 있습니다.
내 시도는 여기에서 적용되지만 입력 변수와 수행 할 열이 적습니다. 다른 모든 요인 수준 과 관련된 값에서 한 요인 수준과 관련된 뺄셈을 가장 쉽게하는 방법 은 다음 과 같습니다. 여러 변수가있는 R ddply
테이블을 ggplot의 긴 형식으로 재구성 할 때까지 기다릴 수도 있습니다.
나에게 어떤 제안이 있습니까?
가장 우아하지는 않지만 group_string
예에서 이미 언급 한 모든 다른 요소의 연결된 문자열 인 새 열을 만들 수 있습니다 . 그러나 그것이 '통제'인지 '치료'인지는 마지막 논거가 될 것입니다. 예를 들어 대신
"11_86_treated_A_water_3"
과 "11_86_control_A_water_3"
너도 아마
"11_86_A_water_3_treated"
과 "11_86_A_water_3_control"
그런 다음 처리 / 제어 하위 문자열이없는 모든 고유 문자열을 통해 루프를 실행할 수 있습니다. 예를 들어, 하나의 고유 문자열이 "11_86_A_water_3_"
있고 각 문자열 에 대해 group_string
에서 "처리"된 행 에서 "제어"가있는 행을 뺍니다 group_string
.
편집 : 좋아, 그냥 또 다른 아이디어가 있었다. 각 부분 군에 대해 두 개의 행을 남겨야하는 치료 (시간, 일수, extrafactor1, extrafactor2, extrafactor3)를 제외한 모든 요인으로 그룹화합니다. 그런 다음를 사용 diff()
하여 각 부분 군에 대한 두 행의 차이를 계산합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다