R 数据框根据日期将列名转换为行,列名具有公共字符串并且非 0 值到 1 行项
R data frame convert column names to rows based on dates, the column names which has a common string and there non 0 values to 1 row item
我想通过查看条件将 R 数据框列名称转换为行,
- 如果两个列名的部分公用名由“_”分隔,如 x_a01,y_a01 将其转换为 1
基于日期的通用名称为 a01 的行项目。
例如:x_a01、y_a01 -> a01、x_b01、y_b01 -> b01
- 这些转换为行值的列名应该有非零值。
例如:x_c01、y_c01 在第一行中有 0 个值,在转换为行项目时应忽略这些值
数据框:
将上述数据帧转换为:
我们可以使用 pivot_longer
将数据重塑为 'long' 格式,然后使用 filter
删除任何 x 和 y 值都为 0
的行
library(dplyr)
library(dplyr)
df1 %>%
pivot_longer(cols = -date, names_to = c(".value", "colname"),
names_sep = "_", values_drop_na = TRUE)%>%
filter(if_any(c(x, y), ~ . > 0))
-输出
# A tibble: 5 x 4
# date colname x y
# <chr> <chr> <dbl> <dbl>
#1 01-01-2021 a01 1 2
#2 01-01-2021 b01 0 4
#3 01-01-2021 d01 3 4
#4 02-01-2021 b01 3.1 1.1
#5 02-01-2021 c01 4.5 6.2
数据
df1 <- structure(list(date = c("01-01-2021", "02-01-2021"), x_a01 = c(1,
0), y_a01 = c(2, 0), x_b01 = c(0, 3.1), y_b01 = c(4, 1.1), x_c01 = c(0,
4.5), y_c01 = c(0, 6.2), x_d01 = c(3, 0), y_d01 = c(4, 0)),
class = "data.frame", row.names = c(NA,
-2L))
我想通过查看条件将 R 数据框列名称转换为行,
- 如果两个列名的部分公用名由“_”分隔,如 x_a01,y_a01 将其转换为 1 基于日期的通用名称为 a01 的行项目。 例如:x_a01、y_a01 -> a01、x_b01、y_b01 -> b01
- 这些转换为行值的列名应该有非零值。 例如:x_c01、y_c01 在第一行中有 0 个值,在转换为行项目时应忽略这些值
数据框:
将上述数据帧转换为:
我们可以使用 pivot_longer
将数据重塑为 'long' 格式,然后使用 filter
删除任何 x 和 y 值都为 0
library(dplyr)
library(dplyr)
df1 %>%
pivot_longer(cols = -date, names_to = c(".value", "colname"),
names_sep = "_", values_drop_na = TRUE)%>%
filter(if_any(c(x, y), ~ . > 0))
-输出
# A tibble: 5 x 4
# date colname x y
# <chr> <chr> <dbl> <dbl>
#1 01-01-2021 a01 1 2
#2 01-01-2021 b01 0 4
#3 01-01-2021 d01 3 4
#4 02-01-2021 b01 3.1 1.1
#5 02-01-2021 c01 4.5 6.2
数据
df1 <- structure(list(date = c("01-01-2021", "02-01-2021"), x_a01 = c(1,
0), y_a01 = c(2, 0), x_b01 = c(0, 3.1), y_b01 = c(4, 1.1), x_c01 = c(0,
4.5), y_c01 = c(0, 6.2), x_d01 = c(3, 0), y_d01 = c(4, 0)),
class = "data.frame", row.names = c(NA,
-2L))