我在R中有一个像这样的数据框:
D I S ...
110 2012 1000
111 2012 2000
110 2012 1000
111 2014 2000
110 2013 1000
111 2013 2000
我想计算每个因素有多少因子水平,并在这样的DF中安全:
D Count I Count S Count ...
110 3 2012 3 1000 3
111 3 2013 2 2000 3
2014 1
或者这个:
D Count
110 3
111 3
I Count
2012 3
2013 2
2014 1
S Count
1000 3
2000 3
...
我尝试使用sapply,levels,library(dplyr)或aggregate进行,但它不会产生所需的输出。我怎么能这样做?
答案 0 :(得分:2)
这是使用data.table
data <- data.frame(D = rep(c("110", "111"), 3),
I = c(rep("2012", 3), "2014", "2013", "2013"),
S = rep(c("1000", "2000"), 3))
str(data)
# you just want
table(data$D)
table(data$I)
table(data$S)
# one option using data.table
require(data.table)
dt <- as.data.table(data)
dt # see dt
dt[, table(D)] # or dt[, .N, by = D], for one variable
paste(names(dt), "Count", sep = "_") # names of new count columns
dt[, paste(names(dt), "Count", sep = "_") := lapply(.SD, table)]
dt # new dt
data2 <- as.data.frame(dt)[, sort(names(dt))]
data2 # final data frame
dplyr
用于第二个输出。
counts <- data %>%
lapply(table) %>%
lapply(as.data.frame)
counts
答案 1 :(得分:1)
我认为最有效的方法是在代码长度和以最终格式存储最终输出方面做到这一点:
library(tidyverse)
# example data
data <- data.frame(D = rep(c("110", "111"), 3),
I = c(rep("2012", 3), "2014", "2013", "2013"),
S = rep(c("1000", "2000"), 3))
data %>%
gather(name,value) %>% # reshape datset
count(name, value) # count combinations
# # A tibble: 7 x 3
# name value n
# <chr> <chr> <int>
# 1 D 110 3
# 2 D 111 3
# 3 I 2012 3
# 4 I 2013 2
# 5 I 2014 1
# 6 S 1000 3
# 7 S 2000 3
第1列表示因子变量的名称。 第二列具有每个变量的唯一值。 第三栏是柜台。
答案 2 :(得分:0)
我认为简单的方法是使用“ plyr” R库。
library(plyr)
count(data$D)
count(data$I)
count(data$S)
它将给你
> count(data$D)
x freq
1 110 3
2 111 3
> count(data$I)
x freq
1 2012 3
2 2013 2
3 2014 1
> count(data$S)
x freq
1 1000 3
2 2000 3