r - 拆分后应用新列

标签 r split

尝试在拆分函数后添加一个 % 列。

编写了以下有效的代码:

percs <- function(agg, deporur=0, all=TRUE, full=FALSE){
  work <- data.frame(NoNA$IMD_NATIONAL_QUINTILE, NoNA$UR,agg)
  work <- as.data.frame(table(work))
  work <-split(work, work[,deporur])

 work

}

根据我的数据,返回:

$`1`
   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq
1                           1       0   1    0
6                           1   Rural   1    0
11                          1   Urban   1   43
16                          1       0   2    0
21                          1   Rural   2    0
26                          1   Urban   2   37

$`2`
   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq
2                           2       0   1    0
7                           2   Rural   1    3
12                          2   Urban   1   30
17                          2       0   2    0
22                          2   Rural   2    1
27                          2   Urban   2   27

$`3`
   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq
3                           3       0   1    0
8                           3   Rural   1    7
13                          3   Urban   1   25
18                          3       0   2    0
23                          3   Rural   2    3
28                          3   Urban   2   13

$`4`
   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq
4                           4       0   1    0
9                           4   Rural   1    9
14                          4   Urban   1   30
19                          4       0   2    0
24                          4   Rural   2    0
29                          4   Urban   2   18

$`5`
   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq
5                           5       0   1    0
10                          5   Rural   1   13
15                          5   Urban   1   40
20                          5       0   2    0
25                          5   Rural   2   11
30                          5   Urban   2   27

我想在每个的末尾添加一个额外的列来显示每个的百分比。

我可以让它在控制台中工作,如下所示:

test<-percs(NoNA$Q1, 1)
test$"1"$newcol <- test$"1"[,4]/sum(test$"1"[,4])
test$"1"

   NoNA.IMD_NATIONAL_QUINTILE NoNA.UR agg Freq newcol
1                           1       0   1    0 0.0000
6                           1   Rural   1    0 0.0000
11                          1   Urban   1   43 0.5375
16                          1       0   2    0 0.0000
21                          1   Rural   2    0 0.0000
26                          1   Urban   2   37 0.4625

但是,我不知道如何让它循环工作,遍历存储在工作数据框中的每个数据框并添加一个额外的列。如果我使用 $ 运算符访问对象,那么它允许我使用数据框,但是使用 [] 运算符就像我通常在 for 循环中那样,它返回列表并且不允许我添加列。

关于我在这里哪里出错有什么想法吗?

最佳答案

这是一个关于测试数据的简单版本

df <- expand.grid(type=1:10, qty=1:5)
split(df, df$type)
$`1`
   type qty
1     1   1
11    1   2
21    1   3
31    1   4
41    1   5

$`2`
   type qty
2     2   1
12    2   2
22    2   3
32    2   4
42    2   5
...

然后要计算百分比,您可以使用 lapply

> lapply(split(df, df$type), function(d) { d$asdf <- cumsum(d$qty)/sum(d$qty); d })
$`1`
   type qty       asdf
1     1   1 0.06666667
11    1   2 0.20000000
21    1   3 0.40000000
31    1   4 0.66666667
41    1   5 1.00000000

$`2`
   type qty       asdf
2     2   1 0.06666667
12    2   2 0.20000000
22    2   3 0.40000000
32    2   4 0.66666667
42    2   5 1.00000000
...

关于r - 拆分后应用新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880315/

相关文章:

java - 拆分数组与具有相同内容的定义数组不同吗?

r - 如何使用核心 R 操作/访问 "dist"类实例的元素?

r - 如何将一个整数随机划分为固定数量的整数,使得得到的元组均匀分布?

r - 将 geom_text 与 ggplot2 中的 geom_vline 对齐

Pandas 按组划分年龄

php - explode 函数可以有3个分隔符吗

r - 如何将配对 t.test 或 Wilcoxon 检验应用于我的数据

r - 评估另一个表中是否不存在某个值

python - 使用 python split 从图像名称中获取文本

c++ - boost 拆分使用率