R 根据因子变量为变量赋值
我想创建一个变量,该变量以因子变量为条件,从数值向量中获取值 我有一个数值向量R 根据因子变量为变量赋值,r,conditional,vectorization,R,Conditional,Vectorization,我想创建一个变量,该变量以因子变量为条件,从数值向量中获取值 我有一个数值向量 x <- c(0, 1000, 50000) 我试过了 df$y[which(df$z == "A")] <- x[1] df$y[which(df$z == "B")] <- x[2] df$y[which(df$z == "C")] <- x[3] 你可以试试: df$y <- x[as.numeric(df$z)] 数据 你可以试试火柴。这将使用NA填充不匹配的值 请注意
x <- c(0, 1000, 50000)
我试过了
df$y[which(df$z == "A")] <- x[1]
df$y[which(df$z == "B")] <- x[2]
df$y[which(df$z == "C")] <- x[3]
你可以试试:
df$y <- x[as.numeric(df$z)]
数据
你可以试试火柴。这将使用NA填充不匹配的值
请注意,OP已经更改了数据,因为我发布了我的原始答案。它仍然有效。这将完成您描述的操作,如果z不是A、B或C,则将NA插入y列
从你的帖子中不清楚如果z不是A,B,C会发生什么;如果您的实际需要更加复杂,那么嵌套的ifelse语句将变得相当麻烦。请提供一个可复制的示例和所需的result@simone这些是相同长度的吗,即z和x@akrun不,长度z>lengthx@simone我只发了一条路。希望有帮助。@simone z中的其他值呢?他们仍然是这样吗?海报上说z从A到K。@Kara-Woo谢谢你的评论。不清楚其他值是否为NA。是的,z中缺少值,抱歉,我没有指定。
ID z y
1 1 A 0
2 2 A 0
3 3 C 50000
4 4 NA NA
5 5 B 1000
6 6 A 0
7 7 NA NA
8 8 NA NA
df$y[which(df$z == "A")] <- x[1]
df$y[which(df$z == "B")] <- x[2]
df$y[which(df$z == "C")] <- x[3]
df$y <- x[as.numeric(df$z)]
df$y <- x[as.numeric(factor(df$z))]
head(df)
# ID z y
#1 1 C 50000
#2 2 B 1000
#3 3 H NA
#4 4 F NA
#5 5 G NA
#6 6 K NA
set.seed(24)
df <- data.frame(ID=1:40, z=sample(c(NA, LETTERS[1:11]), 40, replace=TRUE))
df$y <- x[match(df$z, c("A", "B", "C"))]
df
# ID z y
# 1 1 A 0
# 2 2 A 0
# 3 3 C 50000
# 4 4 D NA
# 5 5 B 1000
# 6 6 A 0
# 7 7 H NA
# 8 8 E NA
set.seed(84)
df <- data.frame(z = sample(LETTERS[1:11], 15, replace = TRUE))
x <- c(0,1000,50000)
df$y <- ifelse(df$z == "A", x[1], ifelse(df$z == "B", x[2], ifelse(df$z == "C", x[3], NA)))
df
# z y
# 1 I NA
# 2 D NA
# 3 J NA
# 4 I NA
# 5 C 50000
# 6 C 50000
# 7 B 1000
# 8 D NA
# 9 G NA
# 10 B 1000
# 11 I NA
# 12 K NA
# 13 J NA
# 14 K NA
# 15 A 0