Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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中包含NA值的行_R_Dplyr_Tidyverse - Fatal编程技术网

如何聚合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))