我使用R进行统计分析。 我想根据ID列将数据分组到一个数组中。这导致具有唯一ID的阵列,每个单元包括对应ID的数据阵列。由于每个ID的数据数量不相似,因此每个单元格中的每个数组都有不同的长度。
所以我想知道如何使用R?
创建长度不同的数组我已经拥有以下代码,但收到错误:
#number of unique IDs
size<-unique(data[,1]);
for (i in 1:length (gr))
{
index<- which(data[,1]==gr[i]);
data_c[[i,1]]<-data[index,];
}
这是错误
提供的元素多于要替换的元素
提前感谢任何评论。
我通过一个例子来解释我的问题:
我有以下数据称为DATA_ALL:
DATA_ALL[]=
id age T1 T2 T3 T4
1 20 1 0 0 0
1 20 NA 0 NA 0
1 20 0 0 0 0
5 30 1 NA 0 0
5 30 0 0 0 1
6 40 0 1 0 0
我想将每个id的数据分组并将所有数据放入一个数组(数组数组)中:
DATA_GROUPED []=
id data
1 1 X1[]=[an array includes all data from DATA_ALL where the id=1]
2 5 X2[]=[an array includes all data from DATA_ALL where the id=5]
3 6 X3[]=[an array includes all data from DATA_ALL where the id=6]
请注意X1的长度!= X2!= X3
那我怎么能创建DATA_GROUPED []矩阵??
答案 0 :(得分:5)
几乎不可能回答与您的代码相关的问题,但总的来说,我认为您要做的是创建一个list
vectors
,有点像这样:
one<-letters[1]
two<-letters[2:3]
three<-letters[4:6]
combined<-list(one=one, two=two, three=three)
请务必立即正确使用索引,最好使用[[
:
for(i in 1:length(combined))
{
cat("The contents of item", names(combined)[i], "are:", combined[[i]], "\n")
}
输出:
The contents of item one are: a
The contents of item two are: b c
The contents of item three are: d e f
修改(编辑问题后):
split.data.frame(DATA_ALL, DATA_ALL[,1])
检查?split
并记下详细信息中的第一段。
注意这确实会创建一个矩阵/数组列表。