必须简化之前一个失败的问题。
我希望提取由'id‘标识的整个组,其中包含另一列中的字符串('inter’或'high'),名为“strmatch”。这个字符串并不会出现在这个组的每个观察中,但是如果它发生了,我希望将这个组分配给相应的数据帧。
数据帧
df <- data.frame(id = c("a", "a", "b", "b","c", "c","d","d"),
std = c("y", "y","n","n","y","y","n","n"),
strmatch = c("alpha","TMB-inter","beta","TMB-high","gamma","delta","epsilon","TMB-inter"))看上去像这样
id std strmatch
a y alpha
a y TMB-inter
b n beta
b n TMB-high
c y gamma
c y delta
d n epsilon
d n TMB-inter预期结果
dfa
id std strmatch
a y alpha
a y TMB-inter
d n epsilon
d n TMB-interdfb
id std strmatch
b n beta
b n TMB-highdfc
id std strmatch
c y gamma
c y delta我试过什么
split(df, grepl("high", df$strmatch))只提供两个数据帧,一个包含“高”行,另一个包含其他数据帧。
非常感谢你的帮助。
发布于 2019-08-20 13:36:42
你可以把它分成两部分。首先查找与"inter|high"匹配的值,然后将它们分解为单独的数据格式,然后查找与任何unique_vals不匹配的值。
unique_vals <- unique(grep("inter|high", df$strmatch, value = TRUE))
c(lapply(unique_vals, function(x) subset(df, id %in% id[strmatch == x])),
list(subset(df, !id %in% id[strmatch %in% unique_vals])))
#[[1]]
# id std strmatch
#1 a y alpha
#2 a y TMB-inter
#7 d n epsilon
#8 d n TMB-inter
#[[2]]
# id std strmatch
#3 b n beta
#4 b n TMB-high
#[[3]]
# id std strmatch
#5 c y gamma
#6 c y deltahttps://stackoverflow.com/questions/57574780
复制相似问题