繁体   English   中英

通过比较2列中的值在R中拆分数据帧?

[英]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转换为长格式,并同时创建一个新变量,该变量将ID1ID2的值与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM