[英]Spliting data frames in R by comparing values in 2 columns?
我有一个数据框如下
ID1 ID2 INT
aaa qqq 1
aaa ccc 2
aaa nnn 1
aaa yyy 1
bbb nnn 3
bbb aaa 4**
ccc ddd 3
ddd bbb 1***
ppp yyy 2
ppp ccc 1
mmm bbb 1***
mmm ppp 2
nnn ccc 2
我想将数据分成新的数据帧,如下所示,其中ID1或ID2中出现的ID是否按如下所示进行分组?
For aaa
ID1 ID2 INT
aaa qqq 1
aaa ccc 2
aaa nnn 1
aaa yyy 1
aaa bbb 4**
此数据帧中的第四行是原始数据中的第六行,其中ID2为“ aaa”
For bbb
ID1 ID2 INT
bbb nnn 3
bbb aaa 4
bbb ddd 3***
bbb mmm 2***
我如何在R中做到这一点?
从这个问题尚不清楚您到底想做什么! 正则表达式或grep可能是您的朋友
grep('a b', c('cc', 'c a b c', '123'))
>2
是否有搜索模式?
读取示例数据:
df <- read.table(text="ID1 ID2 INT
aaa qqq 1
aaa ccc 2
aaa nnn 1
aaa yyy 1
bbb nnn 3
bbb aaa 4
ccc ddd 3
ddd bbb 1
ppp yyy 2
ppp ccc 1
mmm bbb 1
mmm ppp 2
nnn ccc 2", header=TRUE)
将df
转换为长格式,并同时创建一个新变量,该变量将ID1
和ID2
的值与reshape2
软件包结合在一起:
require(reshape2)
df2 <- melt(df, id=c("ID1", "ID2","INT"), measure=c("ID1", "ID2"), variable = "ID")
在数据框列表中拆分数据框:
dfs2 <- split(df2, df2$value)
使用以下两种可能性之一选择列表的特定数据框:
dfs2$aaa
dfs2[[aaa]]
创建单独的数据帧:
list2env(split(df2, df2$value), envir = .GlobalEnv)
将列表中的每个数据框保存到单独的文件中:
lapply(seq_along(dfs2), function(i) write.csv(dfs2[i], file = paste0(names(dfs2)[i],'.csv')))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.