如何迭代数据框的子集并在R中添加列值?

时间:2014-11-25 17:26:30

标签: r dataframe

我有一个从具有...特性的程序输出的文件。

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行。我希望通过这个问题提高我对如何处理数据框架的理解,并一次性解决问题。提前谢谢。

1 个答案:

答案 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")