现有数据框ww
有两个向量,X
和Y
,两个字符(这可能无关紧要,但我只是声明它)。
现在我需要:在同一数据框ZZ
中创建第三个向量ww
,即:
只要X
(我想我可以使用length.out=length(x)
,但不知道如何构建它)
Y
有四个不同的值("M1"
,"M2"
,"M3"
,"M4"
)。如果Y == "M1"
或Y == "M4"
则ZZ ="C"
。如果Y == "M2"
或Y == "M3"
,则ZZ = "V"
。
答案 0 :(得分:1)
一种选择是使用dplyr包中的case_when
来创建ZZ
列。
dat <- data.frame(X = c("a", "b", "c", 'd'),
Y = c("M1", "M2", "M3", "M4"),
stringsAsFactors = FALSE)
dat
# X Y
# 1 a M1
# 2 b M2
# 3 c M3
# 4 d M4
library(dplyr)
dat2 <- dat %>%
mutate(ZZ = case_when(
Y %in% c("M1", "M4") ~ "C",
Y %in% c("M2", "M3") ~ "V",
TRUE ~ NA_character_
))
dat2
# X Y ZZ
# 1 a M1 C
# 2 b M2 V
# 3 c M3 V
# 4 d M4 C
答案 1 :(得分:1)
使用base R我们可以使用ifelse
语句:
transform(dat,ZZ=ifelse(Y%in%c("M1","M4"),"C","V"))
X Y ZZ
1 a M1 C
2 b M2 V
3 c M3 V
4 d M4 C
或
dat$ZZ=ifelse(dat$Y%in%c("M1","M4"),"C","V")
dat
X Y ZZ
1 a M1 C
2 b M2 V
3 c M3 V
4 d M4 C
答案 2 :(得分:1)
以下是使用ifelse
ww <- data.frame(X = c("a", "b", "c", 'd'),
Y = c("M1", "M2", "M3", "M4"),
stringsAsFactors = FALSE)
## Adding the ZZ column
ww2 <- cbind(ww,
ZZ = ifelse(ww$Y %in% c("M1", "M4"), "C", "V"))
请注意,在这种情况下,当ZZ
不 "V"
或Y
时,"M1"
会获取值"M4"
(假设然后它只能是"M2"
或"M3"
)。为了更安全但更慢的解决方案:
## Adding the empty ZZ column
ww2 <- cbind(ww, ZZ = rep("NA", nrow(ww)))
## Filling ZZ
ww2$ZZ <- ifelse(ww$Y %in% c("M1", "M4"), "C", NA)
ww2$ZZ <- ifelse(ww$Y %in% c("M2", "M3"), "V", NA)
答案 3 :(得分:1)
另一种方法是使用因素:
dat$zz = factor(dat$Y, levels = c("M1", "M2", "M3", "M4"))
levels(dat$zz) = c('C', 'V', 'V', 'C')