考虑r中的四列时的频率计数
目前我正在尝试计算数据帧序列集的频率考虑r中的四列时的频率计数,r,merge,count,R,Merge,Count,目前我正在尝试计算数据帧序列集的频率 A B 1 a 1 b 1 c 2 a 2 b 2 c 我有这个数据帧,我想计算另一个数据帧的“B”频率,如下所示 C D 1 a 1 a 1 b 1 b 2 b 2 c 2 c 如您所见,行数不同,因此datatable(计数)不起作用。我想它看起来像这样的频率计数后完成 a b freq 1 a 2 1 b 2 1 c 0 2 a 0 2 b 1 2 c 2 正如您所看到的,它对
A B
1 a
1 b
1 c
2 a
2 b
2 c
我有这个数据帧,我想计算另一个数据帧的“B”频率,如下所示
C D
1 a
1 a
1 b
1 b
2 b
2 c
2 c
如您所见,行数不同,因此datatable(计数)不起作用。我想它看起来像这样的频率计数后完成
a b freq
1 a 2
1 b 2
1 c 0
2 a 0
2 b 1
2 c 2
正如您所看到的,它对所有频率进行计数,甚至0,因为在某些组上没有数据
谢谢你的帮助 使用
merge
和aggregate
df2$freq = 1
df = merge(df1,aggregate(freq~.,df2,length),by.x = c('A','B'),by.y = c('C','D'),all.x = T)
df[is.na(df)] = 0
df
A B freq
1 1 a 2
2 1 b 2
3 1 c 0
4 2 a 0
5 2 b 1
6 2 c 2
更多信息
aggregate(freq~.,df2,length)
C D freq
1 1 a 2
2 1 b 2
3 2 b 1
4 2 c 2
数据输入
df1
A B
1 1 a
2 1 b
3 1 c
4 2 a
5 2 b
6 2 c
df2
C D
1 1 a
2 1 a
3 1 b
4 1 b
5 2 b
6 2 c
7 2 c
数据
df1 = data.frame(A = c(1L, 1L, 1L, 2L, 2L, 2L),
B = c("a", "b", "c", "a", "b", "c"))
df2 = data.frame(C = c(1L, 1L, 1L, 1L, 2L, 2L, 2L),
D = c("a", "a", "b", "b", "b", "c", "c"))
这似乎是一个如何在不降低缺失水平的情况下,将两个因素的频率制成表格的问题 以下是
dplyr
解决方案。这假设dfAB
,如示例数据中所示,不包含重复项(dfAB
可与expand.grid
的输出互换,如果您在数据帧中还没有级别组合)
输出:
# A tibble: 6 x 3
# Groups: A [?]
A B freq
<dbl> <chr> <dbl>
1 1 a 2
2 1 b 2
3 1 c 0
4 2 a 0
5 2 b 1
6 2 c 2
#一个tible:6 x 3
#组:A[?]
A B频率
1 a 2
2 1 b 2
31 c0
4 2 a 0
5 2 b 1
6 2 c 2
(如果
dfAB
中存在重复项,请在加入前向链添加distinct
调用)行数增加了一倍,频率仅为1或0,而不是实际值count@signalstone您能用示例数据尝试此方法吗?@它似乎不起作用,而且在您的更多信息集上,我需要0show@signalstone你看到合并了吗?填充na步骤?它还表示“eval(predvars、data、env)中出错:找不到对象'freq'当我使用频率计数为0时,由于某种原因,B会在B列的每一行前面添加文本。如果B和D是000856或900864之类的数字,会有问题吗?我做了,但我不得不更改df2,因为df2中有更多行。因此a,B只有2列,而C,D在其页面中有多个列,因此我必须指定要使用的列。我确实指定了data.frame(busdata,freq=sapply(busdata_行,函数(x)sum(bus143_1$boardstation%in%x)),row.names=NULL)但是当数据出来时,所有频率都是0错误:by
不能包含从中缺少的联接列C
LHS@signalstone“C”在“我的代码”的右侧,请检查您是否正确复制了它。@W,Murphy列B
/boardstation
连接因子和字符向量,强制转换为字符向量-我的d是名称是boardstation,应该是相同的。但答案是,有多少频率的警告可以忽略,除非结果不合理。如果你真的愿意,你可以在连接之前把B转换成字符或者把D转换成因子(有B的等级)来避免它to@signalstone“答案就是有多少个频率”这不是你想要的吗?
library(dplyr)
dfAB %>%
# need at least one non-joining variable to tell matches from non-matches
left_join(mutate(dfCD, dummy = 1), by = c("A" = "C", "B" = "D")) %>%
group_by(A, B) %>%
summarize(freq = sum(dummy, na.rm = TRUE))
# A tibble: 6 x 3
# Groups: A [?]
A B freq
<dbl> <chr> <dbl>
1 1 a 2
2 1 b 2
3 1 c 0
4 2 a 0
5 2 b 1
6 2 c 2