R为向量生成计数,对于不存在的值,为0

时间:2015-10-24 04:03:30

标签: r vector count dataframe

我的数据在R

中具有以下形式
data<-list(list(Name= "Value1",corresponding_set=c(1,2,3)), list(Name="AnotherKey",corresponding_set=c(4,5,3,4)))

我想要获得的是格式数据框

            1 2 3 4 5
Key         1 1 1 0 0
AnotherKey  0 0 1 2 1 

我尝试了以下内容:

myfunc<-function(x){
  currValue<-x$corresponding_Set
  for(i in 1:5){
    print(c(i,sum(currValue==i))
  }
 }
sapply(data,myfunc)

上面的代码确实打印了我需要的值,但格式如下

1 1
2 1
3 1
4 0
5 1
1 0
2 0
3 0
4 2
5 1

我的问题是

  1. 对于所使用的数据类型是&#34;数据&#34;的结构。适当?如果不是应该如何设计。目前这些数据是静态的,我想暂时保持这种方式
  2. 我无法想出如何将我打印的矢量转换为网格格式(数据框或矩阵)
  3. 任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

您可以将嵌套的lists转换为data.frames,将它们绑定在一起然后调用table来获得您要查找的结果。

data <- list(list(Name = "Value1",
                  corresponding_set = c(1, 2, 3)), 
             list(Name = "AnotherKey",
                  corresponding_set = c(4, 5, 3, 4)))

# Convert each list element to a data.frame
dfs <- lapply(data, as.data.frame)
dfs
# [[1]]
#     Name corresponding_set
# 1 Value1                 1
# 2 Value1                 2
# 3 Value1                 3
# 
# [[2]]
#         Name corresponding_set
# 1 AnotherKey                 4
# 2 AnotherKey                 5
# 3 AnotherKey                 3
# 4 AnotherKey                 4


# bind the two data.frames together 
df <- do.call(rbind, dfs)
df
#         Name corresponding_set
# 1     Value1                 1
# 2     Value1                 2
# 3     Value1                 3
# 4 AnotherKey                 4
# 5 AnotherKey                 5
# 6 AnotherKey                 3
# 7 AnotherKey                 4

# build a table
table(df)
#             corresponding_set
# Name         1 2 3 4 5
#   AnotherKey 0 0 1 2 1
#   Value1     1 1 1 0 0