如何根据一个列名将数据帧拆分为不同的数据帧,请说## sensor_name ##值以R中的“ RI _”,“ AI_”之类的前缀开头,这样我就可以拥有两个数据帧,一个用于RI,另一个用于AI?
我已经尝试了以下代码,但是当我旋转数据框时,它会很好地工作。
map(set_names(c(“ RI”,“ AI”,“ FI”)),〜select(temp_df,starts_with(.x),starts_with(“ time_stamp”)))
我希望输出具有两个不同的数据帧,
RI_df:
AI_df:
自从我刚开始使用R编程语言以来,如果有人帮助我,那就太好了。
答案 0 :(得分:1)
一个选项是split
中的base R
lst1 <- split(df1, substr(df1$sensor_name, 1,2))
names(lst1) <- paste0(names(lst1), "_df")
如果前缀长度是可变的
lst1 <- split(df1, sub("_.*", "", df1$sensor_name))
或使用tidyverse
library(dplyr)
df1 %>%
group_split(grp = str_remove(sensor_name, "_.*"), keep = FALSE)
注意:不建议在全局环境中包含多个对象。因此,请将其保留在list
中,并对该list
本身进行所有分析
答案 1 :(得分:1)
base R
的另一种方法
df <- data.frame(sensor_name=c("R1_111","R1_113","A1_124","A1_2444"),
A=c(1,2,24,4),B=c(2,2,1,2),C=c(3,4,4,2))
df[grepl("R1",df$sensor_name),]
sensor_name A B C
1 R1_111 1 2 3
2 R1_113 2 2 4
df[grepl("A1",df$sensor_name),]
sensor_name A B C
3 A1_124 24 1 4
4 A1_2444 4 2 2
答案 2 :(得分:0)
创建一个变量来标识每个组。之后,您可以对数据进行子集化以将组分开。字符串包中的函数可以从较长的传感器名称中提取相关文本。
library(stringr)
library(dplyr)
# Sample data
X <- tibble(
sensor = c("RI_1", "RI_2", "AI_1", "AI_2"),
A = c(1, 2, 3, 4),
B = c(5, 6, 7, 8),
C = c(9, 10, 11, 12)
)
# Extract text to identify groups
X <- X %>%
mutate(prefix = str_replace(sensor, "_.*", ""))
# Subset for desired group
X %>% filter(prefix == "AI")
# A tibble: 2 x 5
sensor A B C prefix
<chr> <dbl> <dbl> <dbl> <chr>
1 AI_1 3 7 11 AI
2 AI_2 4 8 12 AI
# Or, split all the groups
lapply(unique(X$prefix), function(x) {
X %>% filter(prefix == x)
})
[[1]]
# A tibble: 2 x 5
sensor A B C prefix
<chr> <dbl> <dbl> <dbl> <chr>
1 RI_1 1 5 9 RI
2 RI_2 2 6 10 RI
[[2]]
# A tibble: 2 x 5
sensor A B C prefix
<chr> <dbl> <dbl> <dbl> <chr>
1 AI_1 3 7 11 AI
2 AI_2 4 8 12 AI
根据您对这些组的处理方式,最好使用dplyr软件包中的group_by()