我正在尝试根据类似于以下数据的东西在data.frame中创建一个新变量:
df <- structure(list(id = c(123L, 123L, 332L, 332L, 332L, 100L, 100L,
113L, 113L, 113L, 113L, 551L, 551L), icpc = c("D95", "F85", "A01",
"A04", "K20", "B10", "A04", "T08", "P28", "D95", "A04", "B12",
"D95"), icpc2 = c("F15", "", "", "", "", "", "", "", "", "A01",
"", "A01", ""), reg.date = c("19JUN2015", "15AUG2016", "16MAR2010",
"20JAN2018", "20FEB2017", "01JUN2017", "11JAN2008", "18MAR2018",
"19JAN2017", "16JAN2013", "01MAY2009", "03APR2011", "09MAY2015"
)), class = "data.frame", row.names = c(NA, -13L))
我已使用以下代码管理新列condit
:
library(data.table)
cond1 <- c("D95", "A01")
setDT(df)[, condit := ifelse(any(icpc %in% cond1 | icpc2 %in% cond1), "yes","no"), by=id]
df
但是,我正在使用大型数据集(> 40 milion),并且还想基于icpc
和icpc2
中的字母进行分类。
我的目标是添加一个新列,该列将yes
或no
赋予字母A
(因此,A01
,A04
,A50
等)[ C0]或icpc
。我还希望所有具有相同icpc2
的列在新列id
中都具有yes
。
我正在尝试以下操作:
condit2
这一直持续运行...(我想,df太面包了,如果应该是df2 <- setDT(df)[, condit2 := ifelse
(any(icpc %in% pmatch("K", df) | icpc2 %in% pmatch("K", df)), "yes","no"), by = PATNR]
head(df2)
和df$icpc
?]
比以下内容检查df$icpc2
是否合适:
pmatch
然后看了一些完全不同的东西:
condit2 <- pmatch("K")
这将导致以下数据帧:
library(sqldf)
condit2 <- sqldf("df$icpc | df$icpc2, '%K%'")
任何人都可以提供提示吗?谢谢!!
我正在尝试根据类似于以下数据的东西在data.frame中创建一个新变量:df
id icpc icpc2 reg.date condit2
1: 123 D95 F15 19JUN2015 no
2: 123 F85 15AUG2016 no
3: 332 A01 16MAR2010 yes
4: 332 A04 20JAN2018 yes
5: 332 K20 20FEB2017 yes
6: 100 B10 01JUN2017 yes
7: 100 A04 11JAN2008 yes
8: 113 T08 18MAR2018 yes
9: 113 P28 19JAN2017 yes
10: 113 D95 A01 16JAN2013 yes
11: 113 A04 01MAY2009 yes
12: 551 B12 A01 03APR2011 yes
13: 551 D95 09MAY2015 yes
使用df[, condit2 := fifelse(any(Reduce('|', lapply(.SD, grepl, patt = to_check))),
'yes', 'no'),
by = id, .SDcols = patterns('icpc')]
,可以通过以下方法完成:dplyr
,group_by(id)
一起关注两列,并使用paste
和A
检查在连接的字符串中是否至少有一个sum
。
grepl