我有一个数据框如下
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?中做到这一点?
答案 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
融入长格式并同时创建一个新变量,将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')))