[英]R How to update a column in data.frame using values from another data.frame
[英]Replacing values in a column of a data.frame with values from another data.frame
我的情况是我有一个数据框,其中一列填充了整数1到6.我想用更具描述性的标签替换这些整数,在另一个充当“键”的数据框中提供:
V1 V2
1 1 LABEL1
2 2 LABEL2
3 3 LABEL3
4 4 LABEL4
5 5 LABEL5
6 6 LABEL6
因此,每当我在第一个数据框列(df $ colX)中找到数字1时,我想用LABEL1替换它(即标签第2列,其中df $ colX ==标签第1列)。
我已经尝试过replace(df$colX,labels[,1],labels[,2])
但这只是出于某种原因将整数转换为引用的整数。
我可以使用for循环执行此操作,但这看起来非常慢。
我还在StackOverflow上关于因子的一些建议,但是我在这里使用的列似乎都没有涉及因素(使用stringsAsFactors = FALSE读取)。 有任何想法吗?
你可以尝试match
df$colX <- labels[,2][match(df$colX, labels[,1])]
或者甚至以下应该可行
labels[,2][df$colX]
#[1] "LABEL3" "LABEL5" "LABEL1" "LABEL6" "LABEL1" "LABEL6" "LABEL4" "LABEL3"
#[9] "LABEL1" "LABEL2" "LABEL2" "LABEL3" "LABEL6" "LABEL4" "LABEL5" "LABEL1"
#[17] "LABEL4" "LABEL5" "LABEL3" "LABEL5" "LABEL1" "LABEL3" "LABEL1" "LABEL1"
#[25] "LABEL2"
labels <- structure(list(V1 = 1:6, V2 = c("LABEL1", "LABEL2", "LABEL3",
"LABEL4", "LABEL5", "LABEL6")), .Names = c("V1", "V2"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
set.seed(25)
df <- data.frame(colX= sample(1:6,25, replace=TRUE), colY=rnorm(25))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.