R:在列中总结一个带有 NAN 的数据框
R: summarise a dataframe with NAN in columns
我有以下数据集:
Data1 Data2 Data3
3 NAN NAN
2 NAN NAN
3 NAN NAN
NAN 3 NAN
NAN 5 NAN
NAN 3 NAN
NAN NAN 7
NAN NAN 5
NAN NAN 1
我想总结成这样:
Data1 Data2 Data3
3 3 7
2 5 5
3 3 1
我尝试创建一个行号,按行号分组并应用 summarise
,但它只是用 0 填充 NaN。
data = data %>%
mutate(row = row_number()) %>%
dplyr::group_by(row) %>%
dplyr::summarise(across(c("Data1","Data2","Data3"), ~sum(., na.rm=T))) %>%
distinct(.)
如果您只想计算 sum
,那么这样做:
data %>%
summarise(across(c("Data1","Data2","Data3"), ~sum(., na.rm=T)))
编辑:
您可以使用 pivot_longer
和 pivot_wider
的组合来消除 NaN
值:
data %>%
pivot_longer(starts_with('Data'), values_drop_na = TRUE) %>%
arrange(name) %>%
pivot_wider(names_from = name, values_from = value, values_fn = list) %>%
unnest()
# A tibble: 3 x 3
Data1 Data2 Data3
<dbl> <dbl> <dbl>
1 3 3 7
2 2 5 5
3 1 3 1
或者更好:
library(purrr)
map_dfr(df, na.omit)
如果每一列中的 NaN
数量与示例中所示相同,您可以使用 na.omit
删除这些值。
library(dplyr)
df %>% summarise(across(.fns = na.omit))
#If in your data values are string 'NAN' then use the below
#df %>% summarise(across(.fns = ~.x[.x!= 'NAN']))
# Data1 Data2 Data3
#1 3 3 7
#2 2 5 5
#3 3 3 1
在基数 R 中 -
as.data.frame(sapply(df, na.omit))
数据
如果您在 reproducible format
中提供数据,会更容易提供帮助
df <- structure(list(Data1 = c(3, 2, 3, NaN, NaN, NaN, NaN, NaN, NaN
), Data2 = c(NaN, NaN, NaN, 3, 5, 3, NaN, NaN, NaN), Data3 = c(NaN,
NaN, NaN, NaN, NaN, NaN, 7, 5, 1)), row.names = c(NA, -9L), class = "data.frame")
我有以下数据集:
Data1 Data2 Data3
3 NAN NAN
2 NAN NAN
3 NAN NAN
NAN 3 NAN
NAN 5 NAN
NAN 3 NAN
NAN NAN 7
NAN NAN 5
NAN NAN 1
我想总结成这样:
Data1 Data2 Data3
3 3 7
2 5 5
3 3 1
我尝试创建一个行号,按行号分组并应用 summarise
,但它只是用 0 填充 NaN。
data = data %>%
mutate(row = row_number()) %>%
dplyr::group_by(row) %>%
dplyr::summarise(across(c("Data1","Data2","Data3"), ~sum(., na.rm=T))) %>%
distinct(.)
如果您只想计算 sum
,那么这样做:
data %>%
summarise(across(c("Data1","Data2","Data3"), ~sum(., na.rm=T)))
编辑:
您可以使用 pivot_longer
和 pivot_wider
的组合来消除 NaN
值:
data %>%
pivot_longer(starts_with('Data'), values_drop_na = TRUE) %>%
arrange(name) %>%
pivot_wider(names_from = name, values_from = value, values_fn = list) %>%
unnest()
# A tibble: 3 x 3
Data1 Data2 Data3
<dbl> <dbl> <dbl>
1 3 3 7
2 2 5 5
3 1 3 1
或者更好:
library(purrr)
map_dfr(df, na.omit)
如果每一列中的 NaN
数量与示例中所示相同,您可以使用 na.omit
删除这些值。
library(dplyr)
df %>% summarise(across(.fns = na.omit))
#If in your data values are string 'NAN' then use the below
#df %>% summarise(across(.fns = ~.x[.x!= 'NAN']))
# Data1 Data2 Data3
#1 3 3 7
#2 2 5 5
#3 3 3 1
在基数 R 中 -
as.data.frame(sapply(df, na.omit))
数据
如果您在 reproducible format
中提供数据,会更容易提供帮助df <- structure(list(Data1 = c(3, 2, 3, NaN, NaN, NaN, NaN, NaN, NaN
), Data2 = c(NaN, NaN, NaN, 3, 5, 3, NaN, NaN, NaN), Data3 = c(NaN,
NaN, NaN, NaN, NaN, NaN, 7, 5, 1)), row.names = c(NA, -9L), class = "data.frame")