我对R有些陌生,我已经在这个网站上寻找过帮助,但我还没有找到我想要的东西。让我们假设我有以下内容(这个例子并不详尽,因为我的实际df有大约2,000+行):
ID "A" "B"
1 11-18-17 1
2 10-10-10 1
3 07-02-96 1
4 01-13-20 2
5 02-01-98 2
6 03-04-64 1
7 11-13-84 1
8 11-07-20 2其中列A充满日期,而列B只是数字(这不是一个伪变量)。我想创建一个C列,只有当B列中存在2时,它才用A列中的日期填充。因此,它看起来如下所示:
ID "A" "B" "C"
1 11-18-17 1
2 10-10-10 1
3 07-02-96 1
4 01-13-20 2 01-13-20
5 02-01-98 2 02-01-98
6 03-04-64 1
7 11-13-84 1
8 11-07-20 2 11-07-20我更希望如果没有达到B=2的条件,它在C列中显示为空白。有人能在这方面给我一些帮助吗?我将不胜感激!
发布于 2020-05-25 06:11:05
只需使用矢量化的ifelse按其他列有条件地赋值:
Data
txt <- 'ID "A" "B"
1 "11-18-17" 1
2 "10-10-10" 1
3 "07-02-96" 1
4 "01-13-20" 2
5 "02-01-98" 2
6 "03-04-64" 1
7 "11-13-84" 1
8 "11-07-20" 2'
df <- read.table(text=txt, header=TRUE)
df
# ID A B
# 1 1 11-18-17 1
# 2 2 10-10-10 1
# 3 3 07-02-96 1
# 4 4 01-13-20 2
# 5 5 02-01-98 2
# 6 6 03-04-64 1
# 7 7 11-13-84 1
# 8 8 11-07-20 2解决方案
df$C <- with(df, ifelse(B==2, as.character(A), NA_character_))
df
# ID A B C
# 1 1 11-18-17 1 <NA>
# 2 2 10-10-10 1 <NA>
# 3 3 07-02-96 1 <NA>
# 4 4 01-13-20 2 01-13-20
# 5 5 02-01-98 2 02-01-98
# 6 6 03-04-64 1 <NA>
# 7 7 11-13-84 1 <NA>
# 8 8 11-07-20 2 11-07-20发布于 2020-05-25 04:04:58
当列'b‘等于1时,这应该适用于列'c’中的NA而不是空白。空白是一个字符(class("")返回" character "),R不能在同一列中有一个字符和一个日期。希望这能有所帮助。
library(dplyr)
b = c(1,1,1,2,2,1,1,2)
a = rep("12-13-20", 8)
df <- data.frame(a, b) %>%
mutate(a = as.Date(a, "%m-%d-%y")) %>%
mutate(c = if_else(b == 2, a, NULL))
print(df)
a b c
1 2020-12-13 1 <NA>
2 2020-12-13 1 <NA>
3 2020-12-13 1 <NA>
4 2020-12-13 2 2020-12-13
5 2020-12-13 2 2020-12-13
6 2020-12-13 1 <NA>
7 2020-12-13 1 <NA>
8 2020-12-13 2 2020-12-13https://stackoverflow.com/questions/61979128
复制相似问题