【发布时间】:2016-12-09 04:34:13
【问题描述】:
这个问题可能看起来很初级,但我是一个绝对的 R 初学者,没有找到任何解决方案。
从一个实验中,我有来自 30 个受试者的大型数据文件,其中包含确切的图片名称和相应的反应时间。这 140 张图片属于 9 个不同的类别。
我从以下给定目录中读取了所有 CSV 文件:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i]))
这很好用。接下来,我需要在每个列表中复制变量“代码”,以免丢失原始信息。
lapply(mylist, transform, category=Code)
这可行,但“类别”列只是添加到我的列表中,而不是单独的数据框。
接下来,我需要将变量类别更改为字符,然后应用 for 循环,然后将它们转换回因子。 for 循环适用于单独的数据帧,但我怎样才能使它适用于列表中的每个数据帧? (这里我以数据框 Pb20_2 为例)
for (i in 1:length(Pb20_2$category)){
if (grepl("NonSocialNegative", Pb20_2$category[i])) Pb20_2$category[i] <- "1"
if (grepl("NonSocialNeutral", Pb20_2$category[i])) Pb20_2$category[i] <- "2"
if (grepl("NonSocialPositive", Pb20_2$category[i])) Pb20_2$category[i] <- "3"
}
for (i in 1:length(Pb20_2$category)){
if (grepl("SocialNegative", Pb20_2$category[i])) Pb20_2$category[i] <- "4"
if (grepl("SocialNeutral", Pb20_2$category[i])) Pb20_2$category[i] <- "5"
if (grepl("SocialPositive", Pb20_2$category[i])) Pb20_2$category[i] <- "6"
if (grepl("F_Face", Pb20_2$category[i])) Pb20_2$category[i] <- "7"
if (grepl("N_Face", Pb20_2$category[i])) Pb20_2$category[i] <- "8"
if (grepl("H_Face", Pb20_2$category[i])) Pb20_2$category[i] <- "9"
}
因子转换后,我需要计算每个类别的绝对命中数
Absolute=table(Pb20_2$category,Pb20_2$Type)
- 同样适用于单个数据框 -
然后是相对数。
prop.table(Absolute,1)
- 这也适用于单个数据帧。
那么,两者都应该包含在一个数据框中。
我还需要每个类别的平均反应时间。
try=tapply(Pb20_2$RT, Pb20_2$category, mean, na.rm=T )
- 这同样适用于单个数据帧。
最后,我希望将所有主题放在一个数据框中,用变量“ID”对其进行排序,然后是 18 列:每个类别有两列,一列用于平均反应时间,另一列用于相对数量点击次数。
我可以为每个主题单独计算这个,然后最后将它们合并到一个数据帧中——我已经成功地做到了——但这需要很多时间,而且对于进一步的实验,我更喜欢一个简单的解决方案。
如果我的部分问题至少能得到一些答案或解决方案,我真的很高兴 - 感谢您的帮助!
最好的,
莎拉
【问题讨论】:
-
查看一些数据会很有帮助。此外,您的 sn-ps 也不是太完整,因为
tapply()和table()不会返回容易适应数据框的值。如果可以,请在一个数据帧上显示完整的操作。