我有一个如下所示的数据集:
temperature station.id latitude longtitude sea.distance altitude
1 18 S1 0.5 0.5 0.5 0
2 20.5 S1 0.5 0.5 0.5 0
3 18 S2 0.5 0.5 0.5 0
4 18.6 S2 0.5 0.5 0.5 0
5 21.5 S3 0.5 0.5 0.5 0
6 20.1 S3 3.5 2.5 1.5 200
7 18.3 S3 3.5 2.5 1.5 200
8 16.8 S4 3.5 2.5 1.5 200
将其视为制表符分隔文件,其中R由read.table
读取,依此类推。我希望能够根据station.id
列值自动对值进行分组。
示例:
要为S1
创建一个像S1temp <- c(18, 20.5)
这样的变量,其中包含temperature
值的字符串。
这个想法是数据经常会发生变化,并且必须自动检测到变化。这就是为什么,上面的例子不会这样做。
我认为需要for
循环。争论应该是什么?
感谢。
答案 0 :(得分:1)
使用data.table的一种方法(让我们调用你的data.frame DF)
library(data.table)
DT <- data.table(DF)
DT2 <- DT[,list("temps"=paste(temperature,collapse=", ")),by=station.id]
结果是第一列中的唯一station.id
表和第二列中的temps字符串。
答案 1 :(得分:0)
以下是两个建议 - 可能有更优雅的解决方案。
方法1.对station.id变量的值进行循环,并使用这些数据创建新的data.frame,在当前环境中创建新变量。缺点是可能会产生许多变量。
for(y in unique(df$station.id)){
assign(sprintf('%sdf',y),subset(df,station.id == y))
}
方法2.使用lapply列出相应索引下给定station.id值的所有数据的值。
results <- lapply(unique(df$station.id),function(y) subset(df,station.id == y))
names(results) <- unique(df$station.id)
答案 2 :(得分:0)
最简单的方法之一是使用plyr
包:
require(plyr)
station <- ddply(df, .(station.id), summarise, temps = paste(temperature,collapse=","))
这会为您提供第一列中包含station
的新数据框station.id
和第二列中的温度字符串。