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