R按条件计算出现次数,并将其放入新的数据帧中
我有一个非常复杂的数据框,其中包含了可能的变量,因此我创建了一个简化的数据框,用于解决这个问题:R按条件计算出现次数,并将其放入新的数据帧中,r,dataframe,R,Dataframe,我有一个非常复杂的数据框,其中包含了可能的变量,因此我创建了一个简化的数据框,用于解决这个问题: sample deployment density replicate shell.num A A L 1 1 A A L 1 1 A A L 1
sample deployment density replicate shell.num
A A L 1 1
A A L 1 1
A A L 1 2
A A L 2 1
A A L 2 2
B B L 1 1
B B L 1 2
B B L 2 1
B B L 2 2
A C M 1 2
A C M 1 2
A C M 1 3
A C M 2 1
A C M 2 1
我要做的是生成与每个变量匹配的行数计数,然后将该计数导出到新的数据帧。我希望新的数据框与此数据框的结构相匹配,以便列出所有变量。例如:对于sample=A、deployment=A、density=L、replicate=1、shell.num=1,使用该分类导出的计数应为2
新表基本上如下所示:
sample deployment density replicate shell.num count
A A L 1 1 2
A A L 1 2 1
A A L 2 1 1
A A L 2 2 1
B B L 1 1 1
等等
我知道有一些简单的函数,比如
nrow()
,但我不想对每个可能的变量组合都这样做。在我的真实数据框架中,我需要处理数千行数据,这将无法达到目的。是否有更简单的方法将其组织到新的数据框中,以便将其导出为csv 这里有一个简单的tidyverse
解决方案。基本上,您要做的是在感兴趣的变量上使用group\u by
,然后使用summary(n())
来获得每个组中的计数。这里的count
函数只是此操作的包装器
库(tidyverse)
待定%
计数(示例、部署、密度、复制、shell.num)
#>#A tibble:11 x 6
#>示例部署密度复制shell.num n
#>
#>1 A L 11 2
#>2 A L 1 2 1
#>3 A L 2 1 1
#>4 A L 2 1
#>5 A C M 1 2 2
#>6 A C M 1 3 1
#>7 A C M 2 1 2
#>8BL11
#>9 B L 1 2 1
#>10BL211
#>11 B L 2 1
由(v0.2.0)于2018年2月26日创建。这里是一个简单的
tidyverse
解决方案。基本上,您要做的是在感兴趣的变量上使用group\u by
,然后使用summary(n())
来获得每个组中的计数。这里的count
函数只是此操作的包装器
库(tidyverse)
待定%
计数(示例、部署、密度、复制、shell.num)
#>#A tibble:11 x 6
#>示例部署密度复制shell.num n
#>
#>1 A L 11 2
#>2 A L 1 2 1
#>3 A L 2 1 1
#>4 A L 2 1
#>5 A C M 1 2 2
#>6 A C M 1 3 1
#>7 A C M 2 1 2
#>8BL11
#>9 B L 1 2 1
#>10BL211
#>11 B L 2 1
由(v0.2.0)于2018年2月26日创建。这是使用
表和复制的以R为基础的解决方案:
row <- apply(df, 1, paste0, collapse = "_");
df2 <- cbind.data.frame(
df[!duplicated(row), ],
count = as.numeric(table(row)));
df2;
# sample deployment density replicate shell.num count
#1 A A L 1 1 2
#3 A A L 1 2 1
#4 A A L 2 1 1
#5 A A L 2 2 1
#6 B B L 1 1 2
#7 B B L 1 2 1
#8 B B L 2 1 2
#9 B B L 2 2 1
#10 A C M 1 2 1
#12 A C M 1 3 1
#13 A C M 2 1 1
行这里是使用表和复制的在基R中的解决方案:
row <- apply(df, 1, paste0, collapse = "_");
df2 <- cbind.data.frame(
df[!duplicated(row), ],
count = as.numeric(table(row)));
df2;
# sample deployment density replicate shell.num count
#1 A A L 1 1 2
#3 A A L 1 2 1
#4 A A L 2 1 1
#5 A A L 2 2 1
#6 B B L 1 1 2
#7 B B L 1 2 1
#8 B B L 2 1 2
#9 B B L 2 2 1
#10 A C M 1 2 1
#12 A C M 1 3 1
#13 A C M 2 1 1
row好的,我看到输出是我想要的,但我不确定您是如何构造代码来完成所有工作的。group by工作正常,但我无法生成计数输出。对不起,我对这门语言还不太熟悉。哪一部分让人困惑?这里,count
只是dplyr
包中内置的一个速记tbl%>%groupby(var1,var2)%%>%summary(n())%%>%ungroup()
与tbl%>%count(var1,var2)
相同,我知道输出是我想要的,但我不确定您是如何构造代码来完成所有工作的。group by工作正常,但我无法生成计数输出。对不起,我对这门语言还不太熟悉。哪一部分让人困惑?这里,count
只是dplyr
包中内置的一个速记<代码>tbl%>%分组依据(var1,var2)%>%总结(n())%>%ungroup()
与tbl%>%计数(var1,var2)