R 创建频率数据框并从旧数据框传输列

R 创建频率数据框并从旧数据框传输列,r,dataframe,dplyr,pipe,purrr,R,Dataframe,Dplyr,Pipe,Purrr,我正在使用map函数从数据帧列表创建频率表。我想从原始数据框导入name列。例如,当我输入df_freq$C时,我希望看到三列,value、n和name。对于name列,我希望所有值都等于“C” #加载包并定义变量 rm(list=ls()) 图书馆(purrr) 图书馆(dplyr) ##加载数据 df_原始%#按名称分割数据 imap(函数(x,x_名称){ data.frame(value=Map(seq.int,x$start,x$end)%>%unlist, name=x_name)}

我正在使用map函数从数据帧列表创建频率表。我想从原始数据框导入name列。例如,当我输入
df_freq$C
时,我希望看到三列,
value
n
name
。对于
name
列,我希望所有值都等于
“C”

#加载包并定义变量
rm(list=ls())
图书馆(purrr)
图书馆(dplyr)
##加载数据
df_原始%#按名称分割数据
imap(函数(x,x_名称){
data.frame(value=Map(seq.int,x$start,x$end)%>%unlist,
name=x_name)})
##使用名称列创建频率图
df_频率%
映射(,~count(.x,值))```

可以在
tidyverse
中更直接地完成。创建一个
rowwise
属性,然后
transmute
返回每行从“开始”到“结束”的
名称和
列表
unest
列表
列并进行
计数

library(dplyr)
library(tidyr)
df_raw %>% 
    rowwise %>% 
    transmute(name, value = list(start:end)) %>%
    unnest(c(value)) %>% 
    count(name, value)
-输出

# A tibble: 24 x 3
#   name  value     n
#   <chr> <int> <int>
# 1 A         1     1
# 2 A         2     1
# 3 A         3     1
# 4 A         4     2
# 5 A         5     2
# 6 A         6     2
# 7 A         7     1
# 8 A         8     1
# 9 B         3     1
#10 B         4     1
# … with 14 more rows

在OP的代码中,
count
也需要
name

df %>%
     map(., ~count(.x, name, value))

这是一个
数据表
选项

setDT(df)[, .(value = unlist(Map(seq, start, end)), n = 1), .(name)][, .(n = sum(n)), by = .(name, value)]

    name value n
 1:    C     2 2
 2:    C     3 2
 3:    C     4 2
 4:    C     5 2
 5:    C     6 2
 6:    C     7 2
 7:    C     8 1
 8:    C     9 1
 9:    A     1 1
10:    A     2 1
11:    A     3 1
12:    A     4 2
13:    A     5 2
14:    A     6 2
15:    A     7 1
16:    A     8 1
17:    B     3 1
18:    B     4 1
19:    B     5 2
20:    B     6 2
21:    B     7 2
22:    B     8 1
23:    B     9 1
24:    B    10 1
    name value n
setDT(df)[, .(value = unlist(Map(seq, start, end)), n = 1), .(name)][, .(n = sum(n)), by = .(name, value)]
    name value n
 1:    C     2 2
 2:    C     3 2
 3:    C     4 2
 4:    C     5 2
 5:    C     6 2
 6:    C     7 2
 7:    C     8 1
 8:    C     9 1
 9:    A     1 1
10:    A     2 1
11:    A     3 1
12:    A     4 2
13:    A     5 2
14:    A     6 2
15:    A     7 1
16:    A     8 1
17:    B     3 1
18:    B     4 1
19:    B     5 2
20:    B     6 2
21:    B     7 2
22:    B     8 1
23:    B     9 1
24:    B    10 1
    name value n