2015-07-28 2 views
0

неправильно именованные Edit: ЯсностьR Прикрепление столбцов в Dataset

Когда я добавить новый столбец к существующему data.frame, название столбцов неверны. В резюме.myData, последние два столбца «Мера» и «Мера» должны указывать «плюс» и «минус» соответственно.

Это связано с другим вопросом, который у меня был, где я спрашиваю, как правильно ссылаться на столбец в графическом интерфейсе Tk/R, над которым я работаю.

Parent Question

MyData:

Group Subgroup Measure 
1  A  1 0.234213 
2  A  1 0.046248 
3  A  1 0.391376 
4  A  2 0.911849 
5  A  2 0.729955 
6  A  2 0.991110 
7  A  2 0.378422 
8  A  3 0.898037 
9  A  3 0.258884 
10  A  3  NA 
11  A  3 0.057631 
12  A  3 0.745202 
13  A  3 0.121376 
14  B  1 0.385198 
15  B  1 0.484399 
16  B  1 0.115034 
17  B  1 0.073629 
18  B  1 0.456150 
19  B  2 0.336108 
20  B  2 0.845458 
21  B  2 0.267494 
22  B  3 0.536123 
23  B  3 1.331731 
24  B  3 0.505114 
25  B  3 0.843348 
26  B  3 0.827932 
27  B  3 0.813351 
28  C  1 0.095587 
29  C  1 0.158822 
30  C  1 0.392376 
31  C  1 0.284625 
32  C  2 0.898819 
33  C  2 0.743428 
34  C  2 0.298989 
35  C  2 0.423961 
36  C  3 0.868351 
37  C  3 0.181547 
38  C  3 1.146131 
39  C  3 0.234941 

Append сценарий:

summary.myData<-summarySE(myData, measurevar=paste(tx.choice1), groupvars=paste(tx.choice2),conf.interval=0.95,na.rm=TRUE,.drop=FALSE) 
    summary.myData$plus<-summary.myData[3]-summary.myData[6] 
    summary.myData$minus<-summary.myData[3]+summary.myData[6] 

Результат:

Group N Measure  sd   se  ci Measure Measure 
1  A 12 0.4803586 0.3539277 0.10217014 0.2248750 0.2554836 0.7052335 
2  B 14 0.5586478 0.3412835 0.09121184 0.1970512 0.3615966 0.7556990 
3  C 12 0.4772981 0.3465511 0.10004069 0.2201881 0.2571100 0.6974862 
+0

Извините, но в чем вопрос в точности? – SabDeM

+0

@SabDeM Последние два столбца: «Измерение» и «Измерение», несмотря на то, что (по-видимому) назначены «$ plus» и «$ минус». –

+0

Извините, если я не понял. Я пересмотрю этот пост. –

ответ

1

Проблема вы бежите в том, что вы имеете assigne d $plus и $minus в data.frames, а не в атомных векторах. Поэтому при печати R показывает имя столбца во встроенном файле data.frame ('Measure' в обоих случаях), а не в качестве имени компонента списка ('plus' и 'minus').

str(summary.myData); 
## 'data.frame': 3 obs. of 8 variables: 
## $ Group : Factor w/ 3 levels "A","B","C": 1 2 3 
## $ N  : num 12 14 12 
## $ Measure: num 0.48 0.559 0.477 
## $ sd  : num 0.354 0.341 0.347 
## $ se  : num 0.1022 0.0912 0.1 
## $ ci  : num 0.225 0.197 0.22 
## $ plus :'data.frame': 3 obs. of 1 variable: 
## ..$ Measure: num 0.255 0.362 0.257 
## $ minus :'data.frame': 3 obs. of 1 variable: 
## ..$ Measure: num 0.705 0.756 0.697 
summary.myData; 
## Group N Measure  sd   se  ci Measure Measure 
## 1  A 12 0.4803586 0.3539277 0.10217014 0.2248750 0.2554836 0.7052335 
## 2  B 14 0.5586478 0.3412835 0.09121184 0.1970512 0.3615966 0.7556990 
## 3  C 12 0.4772981 0.3465511 0.10004069 0.2201881 0.2571100 0.6974862 

Заменить присвоений с

summary.myData$plus <- summary.myData[,3]-summary.myData[,6]; 
summary.myData$minus <- summary.myData[,3]+summary.myData[,6]; 

Тогда вы получите:

str(summary.myData); 
## 'data.frame': 3 obs. of 8 variables: 
## $ Group : Factor w/ 3 levels "A","B","C": 1 2 3 
## $ N  : num 12 14 12 
## $ Measure: num 0.48 0.559 0.477 
## $ sd  : num 0.354 0.341 0.347 
## $ se  : num 0.1022 0.0912 0.1 
## $ ci  : num 0.225 0.197 0.22 
## $ plus : num 0.255 0.362 0.257 
## $ minus : num 0.705 0.756 0.697 
summary.myData; 
## Group N Measure  sd   se  ci  plus  minus 
## 1  A 12 0.4803586 0.3539277 0.10217014 0.2248750 0.2554836 0.7052335 
## 2  B 14 0.5586478 0.3412835 0.09121184 0.1970512 0.3615966 0.7556990 
## 3  C 12 0.4772981 0.3465511 0.10004069 0.2201881 0.2571100 0.6974862 

Ключевым моментом здесь является другой стиль индексации. Когда вы используете индексирование 1D, вы фактически обрабатываете data.frame как список (который он внутренне), и поэтому операция индекса возвращает указанные компоненты списка, все еще классифицированные как data.frame. Когда вы используете 2D-индексирование, вы индексируете строки и столбцы отдельно, что позволяет извлекать двумерную «подтаблицу» в файле data.frame. Но когда вы укажете только один столбец, поведение по умолчанию (drop=T) предназначено для того, чтобы столбец был возвращен как атомный вектор, а не как одностолбцовый data.frame. Вы можете изменить это с помощью drop=F.

summary.myData[3]; 
##  Measure 
## 1 0.4803586 
## 2 0.5586478 
## 3 0.4772981 
summary.myData[,3]; 
## [1] 0.4803586 0.5586478 0.4772981 
summary.myData[,3,drop=F]; 
##  Measure 
## 1 0.4803586 
## 2 0.5586478 
## 3 0.4772981 
+0

Что такое "," в 'summary.myData [, 3]'? –

+0

Просто попробовал, отлично работает, спасибо! –

+0

Прочитайте пересмотренный ответ, я должен признать, что я последовал за вами, пока не ударил часть индексации 1D, 2D и 3D, после чего я потерял вас. Я обязательно вернусь через некоторое время (около 6 месяцев), держу пари, я пойму тогда. –

Смежные вопросы