【问题标题】:Frequency of data points by two variables in R [duplicate]R中两个变量的数据点频率[重复]
【发布时间】:2017-05-04 21:26:12
【问题描述】:

我知道必须是一个简单的答案,但我似乎无法弄清楚。

假设我有一个数据集:

id <- c(1,1,1,2,2,3,3,4,4)
visit <- c("A", "B", "C", "A", "B", "A", "C", "A", "B")
test <- c(12,16, NA, 11, 15,NA, 0,12, 5)

df <- data.frame(id,visit,test)

我想知道每次访问的数据点数,以便最终输出如下所示:

visit   test
A       3
B       3
C       1

我该怎么做呢?我试过用表

table(df$visit, df$test)

但我得到了一个完整的网格,其中包含访问和测试值组合的值数。

我可以这样对每一行求和:

sum(table(df$visit, df$test))[1,]
sum(table(df$visit, df$test))[2,]
sum(table(df$visit, df$test))[3,]

但我觉得有一种更简单的方法,但我错过了!任何帮助将不胜感激!

【问题讨论】:

  • 另外:table(df[!is.na(df$test),"visit"]) 我认为应该可以工作。要获取 data.frame,只需使用 data.frame(table(df[!is.na(df$test),"visit"]))

标签: r dataframe


【解决方案1】:

aggregate 的基础 R 将是理想的选择。将idvisit 分组并计算length。在确定length 之前,使用!is.na() 删除带有NA 的行

aggregate(x = df$id[!is.na(df$test)], by = list(df$visit[!is.na(df$test)]), FUN = length)
#  Group.1 x
#1       A 3
#2       B 3
#3       C 1

【讨论】:

  • 谢谢!这真的很有帮助!
  • 只是aggregate(test ~ visit, df, length) ?
  • 如果您特别喜欢聚合的标准界面 - aggregate(!is.na(df["test"]), df["visit"], FUN=sum) 可能更简单。如果您也通过df["col"] 选择,则将变量名称保留在输出中。但是大卫使用公式界面和默认na.action很整洁。
【解决方案2】:

怎么样:

data.frame(rowSums(table(df$visit, df$test)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多