如何聚合R中包含NA值的行
我想从这里开始:如何聚合R中包含NA值的行,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我想从这里开始: City State x1 x2 x3 NA CA 10 10 10 SD CA 10 10 10 NA CA 10 10 10 SF CA 10 10 10 FW TX 5 5 5 NA TX 5 5 5 NA TX 5 5 5 为此: State sum
City State x1 x2 x3
NA CA 10 10 10
SD CA 10 10 10
NA CA 10 10 10
SF CA 10 10 10
FW TX 5 5 5
NA TX 5 5 5
NA TX 5 5 5
为此:
State sum
CA 120
TX 45
编辑:修复了数据帧中的错误。并将“NA”改为“NA”。感谢Ronak这么快的回复。您可以根据dplyr中的cur_数据对列进行子集求和 资料
您可以从dplyr中的cur_数据对列进行子集求和 资料
@Ronak Shah解决方案要好得多,但这里有另一个更长但仍然有效的解决方案,可以让您了解一些有用的函数,以备将来使用:
library(dplyr)
df %>%
group_by(State) %>%
summarise(across(x1:x3, ~ sum(.x, na.rm = TRUE))) %>% # We use across() for column-wise operations
rowwise() %>%
mutate(sum = sum(c_across(x1:x3), na.rm = TRUE)) %>% # We use rowwise() function + c_across() for row wise operations
select(-c(x1:x3))
# A tibble: 2 x 2
# Rowwise:
State sum
<chr> <int>
1 CA 120
2 TX 45
这也是非常有用的,更接近上面提到的:
df %>%
group_by(State) %>%
summarise(sum = sum(c_across(x1:x3), na.rm = TRUE))
# A tibble: 2 x 2
State sum
<chr> <int>
1 CA 120
2 TX 45
@Ronak Shah解决方案要好得多,但这里有另一个更长但仍然有效的解决方案,可以让您了解一些有用的函数,以备将来使用:
library(dplyr)
df %>%
group_by(State) %>%
summarise(across(x1:x3, ~ sum(.x, na.rm = TRUE))) %>% # We use across() for column-wise operations
rowwise() %>%
mutate(sum = sum(c_across(x1:x3), na.rm = TRUE)) %>% # We use rowwise() function + c_across() for row wise operations
select(-c(x1:x3))
# A tibble: 2 x 2
# Rowwise:
State sum
<chr> <int>
1 CA 120
2 TX 45
这也是非常有用的,更接近上面提到的:
df %>%
group_by(State) %>%
summarise(sum = sum(c_across(x1:x3), na.rm = TRUE))
# A tibble: 2 x 2
State sum
<chr> <int>
1 CA 120
2 TX 45
为了提高效率,我们可以使用data.table方法。将data.frame转换为“data.table setDTdf,grouping by”状态,将列指定为.SDcols中的列名模式,获取data.table.SD子集的行和并求和
数据
为了提高效率,我们可以使用data.table方法。将data.frame转换为“data.table setDTdf,grouping by”状态,将列指定为.SDcols中的列名模式,获取data.table.SD子集的行和并求和
数据
哇!感谢Ronak这么快的回复。你为什么要在全国各地使用cur_数据?我之所以这么问,是因为使用sumacrossx1:x3,na.rm=TRUE似乎更直观。跨越仍然是一个循环,我认为我们不需要只选择列,选择做得更好。哇。感谢Ronak这么快的回复。你为什么要在全国各地使用cur_数据?我之所以这么问,是因为使用sumacrossx1:x3,na.rm=TRUE似乎更直观。跨越仍然是一个循环,我认为我们不需要只选择列,选择做得更好。你的问题标题不清楚?NA在这里是什么意思?请更正df:data.frameCity=col1,State=col2,x1=col3,x2=col4,x3=col5中的错误:参数表示不同的行数:7,6,8@AnilGoyal我道歉,我把NA编成了一个字符串。不,你误解了我。NA在计算中的相关性是什么。输出似乎与否无关你可以忽略城市变量,不管它是否有NAs你的问题标题不清楚?NA在这里是什么意思?请更正df:data.frameCity=col1,State=col2,x1=col3,x2=col4,x3=col5中的错误:参数表示不同的行数:7,6,8@AnilGoyal我道歉,我把NA编成了一个字符串。不,你误解了我。NA在计算中的相关性是什么。输出似乎与NAYou无关,您可以忽略城市变量,不管它是否具有NAs:df%>%groups\u byState%>%summarsesum=sumc\u acrosssstarts\u与'x'@ChrisRuehlemann,是的,这也很好。我以前从未在列操作中使用过c_,但在这里它起到了作用。我无法理解NA在这个问题中的相关性??问题是如何聚合包含NA值的行R@AnilGoyal我也没有得到,但我看了一下期望的输出,并认为这将实现目标结果。或者:df%>%group\u byState%>%summarsesum=sumc\u acrosssstart\u与'x'@ChrisRuehlemann,是的,这也很好。我以前从未在列操作中使用过c_,但在这里它起到了作用。我无法理解NA在这个问题中的相关性??问题是如何聚合包含NA值的行R@AnilGoyal我也没有得到,但我看了一下期望的输出,并认为这将带来结果。
df %>%
group_by(State) %>%
summarise(sum = sum(c_across(x1:x3), na.rm = TRUE))
# A tibble: 2 x 2
State sum
<chr> <int>
1 CA 120
2 TX 45
library(data.table)
setDT(df)[ , sum(rowSums(.SD), na.rm = TRUE), State,
.SDcols = patterns('^x\\d+$')]
# State V1
#1: CA 120
#2: TX 45
df <- structure(list(City = c(NA, "SD", NA, "SF", "FW", NA, NA), State = c("CA",
"CA", "CA", "CA", "TX", "TX", "TX"), x1 = c(10L, 10L, 10L, 10L,
5L, 5L, 5L), x2 = c(10L, 10L, 10L, 10L, 5L, 5L, 5L), x3 = c(10L,
10L, 10L, 10L, 5L, 5L, 5L)), class = "data.frame",
row.names = c(NA, -7L))