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

时间:2014-04-09 07:41:54

标签: r dataframe

我有一个数据框如下

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**

此数据框中的第4行是原始数据中的第6行,其中ID2是'aaa'

For bbb     
ID1 ID2 INT
bbb nnn 3
bbb aaa 4
bbb ddd 3***
bbb mmm 2***

我怎么能在R?中做到这一点?

2 个答案:

答案 0 :(得分:0)

从问题中不清楚你究竟想做什么!正则表达式或grep可能是你的朋友

grep('a b', c('cc', 'c a b c', '123'))
>2

是否有搜索模式?

答案 1 :(得分:0)

阅读示例数据:

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')))