我有一个数据帧,我想计算每组内的行数.我通常使用该aggregate函数对数据求和如下:
df2 <- aggregate(x ~ Year + Month, data = df1, sum)
Run Code Online (Sandbox Code Playgroud)
现在,我想计算观察结果,但似乎无法找到适当的论据FUN.直觉上,我认为它会如下:
df2 <- aggregate(x ~ Year + Month, data = df1, count)
Run Code Online (Sandbox Code Playgroud)
但是,没有这样的运气.
有任何想法吗?
一些玩具数据:
set.seed(2)
df1 <- data.frame(x = 1:20,
Year = sample(2012:2014, 20, replace = TRUE),
Month = sample(month.abb[1:3], 20, replace = TRUE))
Run Code Online (Sandbox Code Playgroud) 我希望通过对第二个变量进行分组来计算唯一值的数量,然后将计数添加到现有data.frame作为新列.例如,如果现有数据框如下所示:
color type
1 black chair
2 black chair
3 black sofa
4 green sofa
5 green sofa
6 red sofa
7 red plate
8 blue sofa
9 blue plate
10 blue chair
Run Code Online (Sandbox Code Playgroud)
我想为每个添加数据中存在color的唯一计数types:
color type unique_types
1 black chair 2
2 black chair 2
3 black sofa 2
4 green sofa 1
5 green sofa 1
6 red sofa 2
7 red plate 2
8 blue sofa 3
9 blue plate 3
10 blue chair …Run Code Online (Sandbox Code Playgroud) 想了解一下dplyr代码,但无法弄清楚这一点.见过这里所描述的许多变量(一个类似的问题,总结因素的计数与dplyr并把值出现次数的计数横行到新的变数,如何做到在R里面有dplyr? ),但我的任务就是略小.
给定一个数据框,如何计算变量的频率并将其放在一个新变量中.
set.seed(9)
df <- data.frame(
group=c(rep(1,5), rep(2,5)),
var1=round(runif(10,1,3),0))
Run Code Online (Sandbox Code Playgroud)
然后我们有:
>df
group var1
1 1 1
2 1 1
3 1 1
4 1 1
5 1 2
6 2 1
7 2 2
8 2 2
9 2 2
10 2 3
Run Code Online (Sandbox Code Playgroud)
想要第三列指示每组(group)var1发生多少次,在这个例子中,这将是:count =(4,4,4,4,1,1,3,3,3,1).我试过 - 没有成功 - 比如:
df %>% group_by(group) %>% rowwise() %>% do(count = nrow(.$var1))
Run Code Online (Sandbox Code Playgroud)
解释非常感谢!
我有这样的数据,其中一些"名称"出现超过3次:
df <- data.frame(name = c("a", "a", "a", "b", "b", "c", "c", "c", "c"), x = 1:9)
name x
1 a 1
2 a 2
3 a 3
4 b 4
5 b 5
6 c 6
7 c 7
8 c 8
9 c 9
Run Code Online (Sandbox Code Playgroud)
我希望根据"name"变量的每个级别内的行数(观察值)对数据进行子集化(过滤).如果某个级别的"名称"出现超过3次,我想删除属于该级别的所有行.
我写了这段代码,但无法让它工作.
name x
1 a 1
2 a 2
3 a 3
4 b 4
5 b 5
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,每行是关于瞳孔的观察.数据框中的一个向量是学校的id.我已经获得了一个新的载体,每个学校的计数如下:
tbsch <- table(dt$school)
Run Code Online (Sandbox Code Playgroud)
现在我想将相关的计数值添加到每一行dt.我已经使用for()循环遍历每一行dt并创建一个包含相关计数的新向量并最终使用cbind()它来添加它dt,但我认为这是非常低效的.有这么聪明/简单的方法吗?
我有一个数据框df,看起来像以下内容,其中gender列是一个factor具有两个级别的:
gender age
m 18
f 14
m 18
m 18
m 15
f 15
Run Code Online (Sandbox Code Playgroud)
我想添加一个新列count,该列仅反映该gender级别在数据框中出现的次数。因此,最终,数据框将如下所示:
gender age count
m 18 4
f 14 2
m 18 4
m 18 4
m 15 4
f 15 2
Run Code Online (Sandbox Code Playgroud)
我知道我可以做得到table(df$gender)该因子出现的次数,但是我不知道如何将这些结果转换为中的新列df。我想知道如何使用该table功能-还是有更好的方法来实现我的新专栏?
我在R中有一个大表,需要计算其中一列中值的出现次数,另外将计数放在它自己的列中.没有聚合.
所以,如果我有:
var
23456
34567
45678
23456
etc
Run Code Online (Sandbox Code Playgroud)
我的输出应该是:
var count
23456 2
34567 1
45678 1
23456 2
etc
Run Code Online (Sandbox Code Playgroud)
我已经真正阅读了所有的线程,但似乎无法在没有聚合的情况下找到这样做的方法.我需要的是相当于excel的count(A1:A4;A1).
df <- data.frame(name=c('black','black','black','red','red'),
type=c('chair','chair','sofa','sofa','sofa'),
num=c(4,4,12,4,6))
Run Code Online (Sandbox Code Playgroud)
对于每一行,我想计算“type”与该行的 num 值一起出现的次数,然后创建一个新列。所以对于第一行,“chair”和“num”在数据集中出现了两次,所以它被分配了一个 2。对于第二行,同样的事情。对于第 3 行,沙发出现一次,值为 12。
df
# name type num count
# 1 black chair 4 2
# 2 black chair 4 2
# 3 black sofa 12 1
# 4 red sofa 4 1
# 5 red sofa 6 1
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的data.frame:
24.8
23.2
22.8
22.5
22.5
22.4
22.4
22.4
22.3
22.2
22.2
22.2
22
21.9
21.9
21.8
Run Code Online (Sandbox Code Playgroud)
我想根据频率添加一个值,以得到以下输出:
24.8 1
23.2 1
22.8 1
22.5 2
22.5 2
22.4 3
22.4 3
22.4 3
22.3 1
22.2 3
22.2 3
22.2 3
22 1
21.9 2
21.9 2
21.8 1
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?换句话说,由于28.8发生一次,它的值为1; 由于22.5发生两次,它将具有值2,依此类推.
对于示例数据框:
library(data.table)
df = structure(list(country = c("AT", "AT", "AT", "BE", "BE", "BE",
"DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE",
"DE", "DE", "DE"), level = c("1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"
), region = c("AT2", "AT1", "AT3", "BE2", "BE1", "BE3", "DE4",
"DE3", "DE9", "DE7", "DE1", "DEE", "DEG", "DE2", "DED", "DEB",
"DEA", "DEF", "DE6", "DE8"), N = c("348", "707", "648", "952",
"143", "584", "171", …Run Code Online (Sandbox Code Playgroud)