R data.frame的行总和,在特定列中仅包含数字

R data.frame的行总和,在特定列中仅包含数字,r,dataframe,numbers,subset,R,Dataframe,Numbers,Subset,如何仅对b列中包含数字的行求和 a <- c(1,5,3,1,-8,6,-1) b <- c(4,-2,1,0,"c",2,"DX") df <- data.frame(a,b) df # a b # 1 1 4 # 2 5 -2 # 3 3 1 # 4 1 0 # 5 -8 c # 6 6 2 # 7 -1 DX a如果您希望按行求和: a <- c(1,5,3,1,-8,6,-1) b <- c(4,-2,1,0,"c",2,

如何仅对b列中包含数字的行求和

a <- c(1,5,3,1,-8,6,-1)
b <- c(4,-2,1,0,"c",2,"DX")

df <- data.frame(a,b)
df

#    a  b
# 1  1  4
# 2  5 -2
# 3  3  1
# 4  1  0
# 5 -8  c
# 6  6  2
# 7 -1  DX

a如果您希望按行求和:

a <- c(1,5,3,1,-8,6,-1)
b <- c(4,-2,1,0,"c",2,"DX")

df <- data.frame(a,b = as.numeric(b))
rowSums(df)
如果要按列显示,请执行以下操作:

colSums(df[!is.na(df$b),])
或者根据您希望在列中求和的内容:

colSums(df, na.rm = TRUE)

如果您希望按行求和:

a <- c(1,5,3,1,-8,6,-1)
b <- c(4,-2,1,0,"c",2,"DX")

df <- data.frame(a,b = as.numeric(b))
rowSums(df)
如果要按列显示,请执行以下操作:

colSums(df[!is.na(df$b),])
或者根据您希望在列中求和的内容:

colSums(df, na.rm = TRUE)

我建议在创建
数据.frame
时使用
stringsAsFactors=FALSE
,或者在现有
数据.frame
中将因子转换为字符。然后,您可以将数值提取到一个新列中,您可以使用常规的tidyverse工具求和。


库(tidyverse)
警告:2次解析失败。
#>行col预期实际值
#>5--双c
#>7--双DX
#>总数
#> 1   5
这种方法可以很好地推广到处理多个列:

colSums(df, na.rm = TRUE)
df%>%
mutate_all(funs(parse_double))%>%
总结所有(funs(总和,na.rm=T))
#>警告:2次解析失败。
#>行col预期实际值
#>5--双c
#>7--双DX
#>a b
#> 1 7 5
如果您有许多像这样的
data.frame
s,您可以将其转换为函数并将其映射到列表:

我的乐趣%
突变所有(funs(抑制警告(解析双()))%>%
总结所有(funs(总和,na.rm=T))
}
#创建包含多个data.frames的列表
我的清单%
地图(我的乐趣)
#>一美元
#>a b
#> 1 7 5
#> 
#>b美元
#>a b
#> 1 7 5
正如所指出的
d.b
一样,您可以使用
suppressWarnings()
使
parse\u double
中的警告静音。在本例中,我更喜欢
parse_double
而不是
as.numeric
,因为它提供了有关正在发生的事情的信息

编辑: 由于您在对原始问题的评论中指出,
data.frame
s的列始终具有相同的名称,因此您可以使用
mutate\u at
summary\u at

我的乐趣%
在(“b”处突变,funs(抑制警告(解析双()))%>%
总结(b),funs(总和,na.rm=T))
}
或对于多个列:

我的乐趣%
在(c(“a”,“b”),funs(suppressWarnings(parse_double(.))))%%>处突变
总结(c(“a”、“b”)、funs(总和(,na.rm=T)))
}

我建议在创建
数据.frame
或将因子转换为现有
数据.frame中的字符时使用
stringsAsFactors=FALSE
。然后,您可以将数值提取到一个新列中,您可以使用常规的tidyverse工具求和。


库(tidyverse)
警告:2次解析失败。
#>行col预期实际值
#>5--双c
#>7--双DX
#>总数
#> 1   5
这种方法可以很好地推广到处理多个列:

colSums(df, na.rm = TRUE)
df%>%
mutate_all(funs(parse_double))%>%
总结所有(funs(总和,na.rm=T))
#>警告:2次解析失败。
#>行col预期实际值
#>5--双c
#>7--双DX
#>a b
#> 1 7 5
如果您有许多像这样的
data.frame
s,您可以将其转换为函数并将其映射到列表:

我的乐趣%
突变所有(funs(抑制警告(解析双()))%>%
总结所有(funs(总和,na.rm=T))
}
#创建包含多个data.frames的列表
我的清单%
地图(我的乐趣)
#>一美元
#>a b
#> 1 7 5
#> 
#>b美元
#>a b
#> 1 7 5
正如所指出的
d.b
一样,您可以使用
suppressWarnings()
使
parse\u double
中的警告静音。在本例中,我更喜欢
parse_double
而不是
as.numeric
,因为它提供了有关正在发生的事情的信息

编辑: 由于您在对原始问题的评论中指出,
data.frame
s的列始终具有相同的名称,因此您可以使用
mutate\u at
summary\u at

我的乐趣%
在(“b”处突变,funs(抑制警告(解析双()))%>%
总结(b),funs(总和,na.rm=T))
}
或对于多个列:

我的乐趣%
在(c(“a”,“b”),funs(suppressWarnings(parse_double(.))))%%>处突变
总结(c(“a”、“b”)、funs(总和(,na.rm=T)))
}

Ok thx但事实上,我的数据帧与许多其他具有相同列名称的数据帧在一个列表中,我如何对列表的所有df执行相同的操作?d.b不起作用我得到了在sortOk thx中强制引入的错误NAs,但事实上,我的数据帧与许多其他具有相同列名称的数据帧在一个列表中,我如何执行此操作列表中的所有df都是一样的?d.b不起作用我在sortThx中得到了强制引入的错误NAs,但是如果我的所有数据帧都没有相同的名称呢?@JulienNguyen这没关系。使用这种方法,您可以在每个
data.frame
中使用不同的列名,并且列表中的每个元素都可以使用不同的名称,只要您始终对每个
data.frame
中的所有列求和没有问题。我稍微编辑了我的答案以反映这一点。如果我有两个名为“Fichier1”和“Fichier2”的数据帧,我在函数中编写的内容而不是df?@JulienNguyen我对函数参数的命名很差。我将其更改为
x
,以更好地显示该函数在列表的每个元素上运行,而不管这些元素的名称如何。等等,如果我只想在2或3列上求和,不知道该怎么做?非常感谢,但如果我的所有数据帧都没有相同的名称怎么办?@JulienNguyen这没关系。使用这种方法,您可以在每个
data.frame
中使用不同的列名,并且列表中的每个元素都可以使用不同的名称,只要您始终对每个
data.frame
中的所有列求和没有问题。为了反映这一点,我稍微编辑了一下我的答案