我正在尝试创建一个总计列,以将前面各列的值相加。但是,如果有NA,我将遇到困难。如果该行中没有NA,则我的脚本将不会计算总和。
我如何编辑以下脚本以将NA实质上计数为0,或者完全忽略它们,但仍计算总和。我实际上不想将NA更改为0。
CTDB %>% mutate(SCARED_TOTAL_CHILD = CTDB %>% rowwise() %>%
SELECT(SCARED_BREATHE_CHILD:SCARED_SHY_CHILD) %>% rowSums()) -> CTDB
Run Code Online (Sandbox Code Playgroud)
谢谢!!
我正在尝试学习如何使用across()R 中的函数,并且我想用rowSums()它做一个简单的事情。但是,我不断收到此错误:
\n\n错误:
\nmutate()输入有问题..2。x 'x' 必须是数字 \xe2\x84\xb9\n输入..2为rowSums(., na.rm = TRUE)。
然而,我所有相关的列都是数字。任何帮助任何解释我为什么会收到此错误的信息将不胜感激!
\n这是一个可重现的示例:
\nlibrary(dplyr)\ntest <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", "P3"),\n sep_2021 = c(1, 2, NA),\n oct_2021 = c(5, 2, 1))\n\n\ntest %>%\n select(resource_name, project, sep_2021, oct_2021) %>%\n mutate(total = across(contains("_20")), rowSums(., na.rm = TRUE))\nRun Code Online (Sandbox Code Playgroud)\n这就是我要去的原因
\nanswer <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", …Run Code Online (Sandbox Code Playgroud) 这是我的数据集(MergedData)在R中的样子的示例,其中我的每个参与者(5行)在每个测试中获得了分数(7列).我想知道所有测试的总分(所有列),但是每个参与者(行).
另外,我的完整数据集不仅仅包含这几个变量,所以如果可能的话,我想使用公式和循环来实现它,而不必逐行/逐列地输入.
Participant TestScores
ParticipantA 2 4 2 3 2 3 4
ParticipantB 1 3 2 2 3 3 3
ParticipantC 1 4 4 2 3 4 2
ParticipantD 2 4 2 3 2 4 4
ParticipantE 1 3 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它不起作用:
Test_Scores <- rowSums(MergedData[Test1, Test2, Test3], na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Error in `[.data.frame`(MergedData, Test1, Test2, Test3, :
unused arguments
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?谢谢!!
我试图在一个大数据框中按行计算二进制字符结果:
V1 V2 V3 V4 V5
Loss Loss Loss Loss Loss
Loss Loss Win Win Loss
Loss Loss Loss Loss Loss
Run Code Online (Sandbox Code Playgroud)
我需要知道的是按行输赢的频率.这只是一个简短的例子(大型模拟输出的片段),但对于第1行,在五次模拟中,我有五次损失,第二行三次丢失,两次获胜等.
我希望生成一个单独的表来显示按行获胜/失败的频率,或者,如果这不起作用,则添加两个新列:一个为每行提供"Win"和"Loss"的数量.
每一行都是不同的情况,每一列都是该案例的复制品.这显示为具有两个级别"损失""赢"的因素的数据框.
M.5 M5.9 M10.14 M14.17 F.5 F5.9 F10.14 F14.17
Alabama 154902 158765 163731 97673 146906 154067 157592 91339
Alaska 27593 27033 26425 15899 26341 25172 24487 14315
Arizona 223705 236024 230633 138579 214067 218351 227456 130770
Arkansas 99007 105750 103149 59618 92649 99763 94845 56848
California 1296287 1296812 1306123 825862 1240523 1239678 1245997 788024
Colorado 172562 187549 168057 100405 164433 172087 170502 95712
Run Code Online (Sandbox Code Playgroud)
我正在使用包从美国社区调查中汇编数据acs。这是数据框的头部,我有关于每个州 5、5-9、10-14 岁以下的男性和女性的数量。数据框名称是 N0018_12_4。我想找出每个州 18 岁以下儿童的总人口。当我像这样尝试 rowsum 时,我收到一条错误消息,指出“缺少参数“组”,没有默认值”。我尝试阅读 R 上的帮助页面并搜索有关如何在 cran/ 其他地方使用参数“组”的示例,但我仍然不明白我应该用该参数做什么。
任何帮助将不胜感激!:)
对于基本的 R 矩阵类,我们有一个rowsum函数,它可以非常快速地计算跨行组的列总和。
Matrix 包中是否有等效的功能或方法?
我rowsum对大型 dgCMatrix 对象(即数百万行,但大约 95% 稀疏)的快速替代方案特别感兴趣。
我有一个数据集,我想计算某些列的每个参与者的参与率(非 NA 的数量/总列)。实际数据集有许多我想忽略的列。
为此,假设我只想知道 item 和 score 列(5 列)中的参与率,而忽略 name 和 email 列。此代码有效:
library(tidyverse)
data <- tibble(name = c("Corey", "Sibley", "Justin"),
item_1 = c(1, 2, NA),
item_2 = c(1, NA, NA),
item_3 = c(2, NA, NA),
item_4 = c(3, 2, NA),
score = c(NA,NA, 1),
email = c("on file", "on file", "on file"))
data %>%
mutate(part_rate = rowSums(!is.na(select(., -c(name, email))))/5 * 100)
Run Code Online (Sandbox Code Playgroud)
但是,在实际数据集中,我对不同的参与者有不同的分母(5 个),因此我只想列出要排除/包含的列一次。我试过这个,但它不起作用:
columns_to_exclude <- c("email", "name")
data %>%
mutate(part_rate = rowSums(!is.na(select(., !%in% columns_to_exclude)))/5 * 100)
Run Code Online (Sandbox Code Playgroud)
有什么办法可以让我们在这个选择中使用 in 运算符,这样我就可以避免多次复制和粘贴相同的列来排除吗? …
我是 R 的新手,并寻求帮助来计算每行所选列的总和。我的简单数据框如下。
data = data.frame(location = c("a","b","c","d"),
v1 = c(3,4,3,3), v2 = c(4,56,3,88), v3 =c(7,6,2,9), v4=c(7,6,1,9),
v5 =c(4,4,7,9), v6 = c(2,8,4,6))
Run Code Online (Sandbox Code Playgroud)
我想要新数据框中每一行的 V1 到 V3 和 V4 到 V6 列的总和。
x1 x2
a 14 13
b 66 18
c
d
Run Code Online (Sandbox Code Playgroud)
我做了类似下面的事情。
rowSums(data[,2:4][,5:7])
Run Code Online (Sandbox Code Playgroud)
但是我的代码应该有问题。在此先感谢您的帮助。
我有一个matrix包含两个级别分组的矩阵,如行名和列名所示。
UKC1_SS1 UKC1_SS2 UKC2_SS1 UKC2_SS2
UKC1_SS1 1 2 3 4
UKC1_SS2 5 6 7 8
UKC2_SS1 9 10 11 12
UKC2_SS2 13 14 15 16
Run Code Online (Sandbox Code Playgroud)
我想根据列名和行名的前四位数字创建一个包含列和行总和的表:
UKC1 UKC2
UKC1 14 22
UKC2 46 54
Run Code Online (Sandbox Code Playgroud)
我尝试计算rowsums并按colSums顺序,
sum.matrix <- rowsum(matrix, substr(rownames(matrix), start = 1, stop = 4))
sum.matrix <- colSums(sum.matrix, substr(colnames(test), start = 1, stop = 4)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误消息: colSums(test, substr(colnames(test), start = 1, stop = 4)) 错误:'na.rm' 参数无效
当我运行时,sum(is.na)我确认matrix.
我正在尝试使用 R 的dplyr包为数据集中的每年创建多个新列,即与每年季度末数字(三月、六月、九月、十二月)对应的列的总和。我能够弄清楚如何“有效”地做到这一点的唯一方法是使用 for 循环。但有些事情告诉我,有一种替代的、更有效的或更好的方法来解决这个问题(也许我应该在这里使用地图函数,但我只是不确定?)。这是一个可以复制的玩具示例:
library(tidyverse)\nlibrary(glue)\n\n# Create a toy example and print the resulting tibble\nset.seed(100) # make results reproducible by setting seed\nvars <- c("AgeGroup", paste0(month.abb[seq(3, 12, 3)], "_", rep(15:17, each = 4)))\n\n(df <- cbind(LETTERS[1:5], matrix(rpois(n = (length(vars) - 1) * 5, 30), nrow = 5)) %>% \n data.frame() %>%\n setNames(vars) %>% \n tibble() %>% \n mutate(across(-1, as.integer))\n )\nRun Code Online (Sandbox Code Playgroud)\n它将示例/可重现的数据集设置为:
\n# A tibble: 5 \xc3\x97 13\n AgeGroup Mar_15 Jun_15 Sep_15 Dec_15 Mar_16 Jun_16 Sep_16 Dec_16 Mar_17 …Run Code Online (Sandbox Code Playgroud) 我有以下数据:
library(dplyr)
library(purrr)
d <- data.frame(
Type= c("d", "e", "d", "e"),
"2000"= c(1, 5, 1, 5),
"2001" = c(2, 5 , 6, 4),
"2002" = c(8, 9, 6, 3))
Run Code Online (Sandbox Code Playgroud)
我想使用 rowsum 和 mutate 生成一个新行,它是“d”的总和,另一行是“e”的总和,这样数据看起来像这样:
d2 <- data.frame(
Type= c("d", "e", "d", "e", "sum_of_d", "Sum_of_e"),
"2000"= c(1, 5, 1, 5, 2, 10),
"2001" = c(2, 5 , 6, 4, 8, 9),
"2002" = c(8, 9, 6, 3, 14, 12))
Run Code Online (Sandbox Code Playgroud)
我认为代码应该是这样的:
d %>%
dplyr::mutate(sum_of_d = rowSums(d[1,3], na.rm = TRUE)) %>%
dplyr::mutate(sum_of_e = …Run Code Online (Sandbox Code Playgroud) 我有 50 多列,并查看了各种解决方案,包括这个.
但是,这并不能真正回答我的问题。我有列名,例如:
total_2012Q1, total_2012Q2, total_2012Q3, total_2012Q4,..., up to total_2014Q4, 和其他字符变量。我想按年份添加行,所以最后,我会有三年的列:total_2012, total_2013, total_2014.
我不想rowsum并选择类似 .. 的东西sample[,2:5]。有没有一种方法可以在不手动查看列号的情况下对它们求和?此外,split.default是一个选项,但如果还有字符变量,你如何只处理你想要总结的 int 变量?
简单的可重现示例(预):
id total_2012Q1 total_2012Q2 total_2013Q1 total_2013Q2 char1 char2
1 1231 5455 1534 2436 N Y
2 3948 1239 223 994 Y N
Run Code Online (Sandbox Code Playgroud)
可重现的示例(帖子):
id total_2012 total_2013 char1 char2
1 6686 3970 N Y
2 5187 1217 Y N
Run Code Online (Sandbox Code Playgroud)
感谢您的任何建议。