我对R来说还很陌生,想知道这里的人是否对我的问题有更好的解决方案,因为我的时间太浪费了。我知道R不是非常“ for-loop-friendly”,所以我相信有更好的方法来解决这个问题。
我有一个数据框,其中x是文本字符串,y是数字id:
x = c("a", "b", "c", "b", "a")
y = c(1,2,3,4,5)
df <- data.frame(x, y)
我希望a在x列中找到所有匹配项,并为它们分配与y中第一个相同的数值。我已经解决了以下问题:
library(foreach)
library(iterators)
for(i in 1:NROW(df)) {
for(j in i:NROW(df)) {
if(df$x[j] == df$x[i]){
df$y[j] <- df$y[i]
}
j = j + 1
}
i = i + 1
}
问题是,我有一个相当大的数据集,这使得该过程需要很多时间!希望这里的任何人都知道一个更省时的选择!
如果您的数据集确实很大,那么data.table可能是最快的解决方案(请参阅此处的基准)。
library(data.table)
setDT(df)
df[, y := first(y), by = x]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句