假设我有一个制表符分隔的文件fileA.txt
,其中包含以下几种类型的信息:
X 123 78000 0 romeo
X 78000 78004 56 juliet
Y 78004 78005 12 mario
Y 78006 78008 21 mario
Y 78008 78056 8 luigi
Z 123 78000 1 peach
Z 78000 78004 24 peach
Z 78004 78005 4 peach
A 78006 78008 12 zelda
A 78008 78056 14 zelda
我将此数据框保存到变量中,如下所示:
df <- read.table("fileA.txt",sep="\t",colClasses=c("character","numeric","numeric","numeric","character"))
colnames(df) <- c("location","start","end","value","label")
我们假设我不知道第一列df[,1]
中包含多少个不同的字符串,并将此号码称为n
。我想自动生成n
个新数据框,每个数据框包含单一类型字符串的信息。我该如何为此编写函数?
答案 0 :(得分:4)
您可以使用拆分执行此操作,这将返回list
,其中包含以您拆分的每个级别命名的data.frame
。
df <- data.frame(v = rep(1:10, 2), n = rep(letters[1:10], 2))
split(df, df$n)
答案 1 :(得分:2)
可能你需要:
library(plyr)
out <- llply(unique(df[,1]), function(x) subset(df, df[,1]==x))
out
它会创建list
,其中每个元素都是data.frame
,具有特定的location
。
现在,您可以data.frames
访问out[[1]]
。
如果你想保留姓名:
names(out) <- unique(df[,1])
out$X # gives data.frame with location=='X'
答案 2 :(得分:2)
for (x in unique(df[, 1]))
assign(paste("df", x, sep="_"), df[df[, 1] == x, ])
或
list2env(split(df, df$location), environment())