Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
考虑r中的四列时的频率计数_R_Merge_Count - Fatal编程技术网

考虑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