我有一个从具有...特性的程序输出的文件。
image rightans trial response subject condition accuracy rt subtrial trainedOn
70_82.png 1 1070 Yes b232 Inconsistent 1 1530 70
9_100.png 0 1071 No b232 Inconsistent 1 962 71
80_72.png 1 1072 Yes b232 Inconsistent 1 1138 72
14_75.png 0 1073 No b232 Inconsistent 1 675 73
37_47.png 0 1074 No b232 Inconsistent 1 1001 74
31_62.png 0 1075 No b232 Inconsistent 1 672 75
62_1.png 1 1076 No b232 Inconsistent 0 627 76
95_24.png 1 1077 Yes b232 Inconsistent 1 668 77
39_21.png 0 1078 No b232 Inconsistent 1 801 78
24_54.png 0 1079 No b232 Inconsistent 1 1033 79
82_44.png 1 1080 Yes b232 Inconsistent 1 1362 80
ShapeRadio-inconsistRadio
你会注意到最后一行。这是一个在每个subject
内不会发生变化的情况。
如何在R中循环数据框并将该值添加到"经过培训的"专栏,但具体到每个科目?可能有可能具体利用的另一种一致性:ShapeRadio-inconsistRadio
出现的每162行。我希望通过这个问题提高我对如何处理数据框架的理解,并一次性解决问题。提前谢谢。
答案 0 :(得分:1)
这就是我的所作所为。这完美地工作,并清理数据以启动。我确信这是一个更优雅,非循环的解决方案,但只有很少的R经验,这就是我最终的结果。
d <- read.csv('data.csv')
ids <- levels(d$subject)
ids <- ids[-1] # remove blank
trainedline = 161 # first line with trainedOn
# loop over logical filters for each id and change their trainedOn value
for (id in ids) {
subjdata <- d[d$subject == id,] # logical index for subject
trained <- as.character(d$image[trainedline]) # pull out the trained string
d$trainedOn[which(d$subject == id)] <- trained # shove it in `trainedOn`
trainedline = trainedline + 162 # increment the line number for the next subj
next
}
# remove lines w/ NA
d.clean <- d[complete.cases(d),]
write.csv(d.clean, file = "clean_data.csv")