R data.frame的行总和,在特定列中仅包含数字
如何仅对b列中包含数字的行求和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,
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
中的所有列求和没有问题。为了反映这一点,我稍微编辑了一下我的答案