R 使用数据表同时重命名多个因素

R 使用数据表同时重命名多个因素,r,data.table,R,Data.table,我喜欢数据表,并使用它有条件地重命名或添加因子。然而,我似乎一次只能做一个因素。以下是一个例子: a <- rep(c("A", "B", "C", "D"), each=3) b <- 1:12 df <- data.frame(a,b) DT <- data.table(df) 这很有效。现在如果我想把A和C改成等于z: DT[a==c("A", "C"), New:="z"] 给了我有趣的答案: dput(DT) structure(list(a = struc

我喜欢数据表,并使用它有条件地重命名或添加因子。然而,我似乎一次只能做一个因素。以下是一个例子:

a <- rep(c("A", "B", "C", "D"), each=3)
b <- 1:12
df <- data.frame(a,b)
DT <- data.table(df)
这很有效。现在如果我想把A和C改成等于z:

DT[a==c("A", "C"), New:="z"]
给了我有趣的答案:

dput(DT)
structure(list(a = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
3L, 4L, 4L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), 
    b = 1:12, New = c("z", NA, "z", NA, NA, NA, NA, "z", NA, 
    NA, NA, NA)), .Names = c("a", "b", "New"), row.names = c(NA, 
-12L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000140788>, index = structure(integer(0), a = integer(0)))
我肯定这是件简单的事,我好像找不到,所以请排队吧!。谢谢

要确认,我希望的输出是:

dput(DT)
structure(list(a = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
3L, 4L, 4L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), 
    b = 1:12, New = c("z", "z", "z", NA, NA, NA, "z", "z", "z", 
    NA, NA, NA)), .Names = c("a", "b", "New"), row.names = c(NA, 
-12L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000140788>, index = structure(integer(0), a = integer(0)))
您应该在%中使用%而不是==,因此您需要:

DT[a %in% c("A", "C"), New:="z"]
其中:

> DT
    a  b New
 1: A  1   z
 2: A  2   z
 3: A  3   z
 4: B  4  NA
 5: B  5  NA
 6: B  6  NA
 7: C  7   z
 8: C  8   z
 9: C  9   z
10: D 10  NA
11: D 11  NA
12: D 12  NA
使用数据:

a <- rep(c("A", "B", "C", "D"), each=3)
b <- 1:12
DT <- data.table(a,b)
在数据帧中,您可以执行以下操作:

df <- data.frame(a,b)
df$New <- NA
df[df$a %in% c("A", "C"), "New"] <- "z"
要获得相同的结果。

您应该在%中使用%而不是==,因此您需要:

DT[a %in% c("A", "C"), New:="z"]
其中:

> DT
    a  b New
 1: A  1   z
 2: A  2   z
 3: A  3   z
 4: B  4  NA
 5: B  5  NA
 6: B  6  NA
 7: C  7   z
 8: C  8   z
 9: C  9   z
10: D 10  NA
11: D 11  NA
12: D 12  NA
使用数据:

a <- rep(c("A", "B", "C", "D"), each=3)
b <- 1:12
DT <- data.table(a,b)
在数据帧中,您可以执行以下操作:

df <- data.frame(a,b)
df$New <- NA
df[df$a %in% c("A", "C"), "New"] <- "z"
达到同样的效果