我遇到了一个问题,我编译数据集从多个来源,其中他们有相同类型的数据,我需要的,但列名不同!所以我试图找出如何编译所有这些数据在一个单一的函数,我可以选择我想要的列名基于排名系统,因为列名不同,我想包括。
虽然我不知道如何为这个特定的问题创建一个合适的可重复的例子,但我想出了这个数据集,它包含三个变量相似但名称不同的 Dataframe ,目标是创建一个排名系统,为它选择(或重命名)变量。
作为示例,如果数据集1具有Temp 1、Temp 2、Temp 3和Temp 4;dataset 2有T_1_1_1、T_1_1_2、T_1_1_3和T_1_1_4,我想先选择“Temp 1”和“T_1_1_1”。假设其他数据集可能有这些或其他变量名称的混合(将有多个以“T”开头的变量)。
我正在编译来自100多个数据集的数据,所以可变性是我面临的一个问题。
更具体地说,我想创建某种排序系统来选择列名,基于下面的示例:
选择最接近T_1_1_1的值,首先从变量中选择,格式如下:第1_1次植入、第1_2次植入、第1_3次植入、第1_4次植入、第1_5次植入
选择最接近Temp 1的值,首先使用以下格式的变量:温度1、温度2、温度3、温度4
使用以下格式首先从变量中选择最接近P的值:第1页、第1页、第2页、第3页、第4页、第5页、第6页、第7页
选择最接近P_FI_1的值,首先从变量中选择,格式如下:P_FI_1、P_FI_2、P_FI_3、P_FI_4、P_FI_5、P_FI_6、P_FI_7、
我想我需要dplyr中的一些内容,其中rename_at()带有any_of()(如下所示:https://dplyr.tidyverse.org/reference/rename.html),但我不确定如何让它对我的特定问题起作用。
任何帮助将不胜感激!
library(dplyr)
#Dataset 1
dataset1 <- as_tibble(iris) # so it prints a little nicer
#goal: have it pull Temp1, P3, S2_1 out of all possible options
dataset1$Temp1 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$Temp2 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$Temp3 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$Temp4 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P6 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P7 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P3 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P4 <- sample(50, size = nrow(dataset1), replace = TRUE)
#Dataset #2
dataset2 <- as_tibble(iris) # so it prints a little nicer
#goal: have it pull T_1_1, P_FI_3, S_1_6 out of all possible options
dataset2$T_1_1 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$T_1_2 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$T_1_3 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$T_1_4 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$P_FI_6 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$P_FI_7 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$P_FI_3 <- sample(50, size = nrow(dataset2), replace = TRUE)
dataset2$P_FI_4 <- sample(50, size = nrow(dataset2), replace = TRUE)
#Dataset #3
dataset3 <- as_tibble(iris)
#goal: have it pull T_1_2, P, S out of all possible options
dataset3$T_1_2 <- sample(50, size = nrow(dataset3), replace = TRUE)
dataset3$T_1_3 <- sample(50, size = nrow(dataset3), replace = TRUE)
dataset3$T_1_4 <- sample(50, size = nrow(dataset3), replace = TRUE)
dataset3$T_1_5 <- sample(50, size = nrow(dataset3), replace = TRUE)
dataset1$P <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P7 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P6 <- sample(50, size = nrow(dataset1), replace = TRUE)
dataset1$P4 <- sample(50, size = nrow(dataset1), replace = TRUE)
#Goals - I want something like this for the end result. It can be rename or subset, whatever is easiest.
#I'm not sure how to create a ranking system for the column names to select from but I'm thinking something like this:
#Select values closest to T_1_1_1 first out of variables with this format
#T_1_1
#T_1_2
#T_1_3
#T_1_4
#T_1_5
#Select values closest to Temp1 first out of variables with this format
#Temp1
#Temp2
#Temp3
#Temp4
#Select values closest to P first out of variables with this format
#P
#P1
#P2
#P3
#P4
#P5
#P6
#P7
#Select values closest to P_FI_1 first out of variables with this format
#P_FI_1
#P_FI_2
#P_FI_3
#P_FI_4
#P_FI_5
#P_FI_6
#P_FI_7
#goal: have it pull Temp1, P3 out of all possible options
colnames(dataset1)
dataset1$Temperature <- dataset1$Temp1
dataset1$Precipitation <- dataset1$P3
colnames(dataset1)
#goal: have it pull T_1_1, P_FI_3 out of all possible options
colnames(dataset2)
dataset2$Temperature <- dataset2$T_1_1
dataset2$Precipitation <- dataset2$P_FI_3
colnames(dataset2)
#goal: have it pull T_1_2, P out of all possible options
colnames(dataset3)
dataset3$Temperature <- dataset3$T_1_2
dataset3$Precipitation <- dataset3$P
colnames(dataset3)
1条答案
按热度按时间lp0sw83n1#
下面是一个使用几个类别的概念证明。我的方法是获取列名,应用一些逻辑对它们进行分类,然后为每个类别选择字母表中的第一个。
有些类别有重叠的性质,所以对于
case_when
,你会想从最具体的开始,即在你寻找“P”之前寻找“P_”,因为只有第一个会得到“P_1”,而第二个会同时包括“P1”和“P_1”。具体是一个实现细节,你将处于更好的位置来弄清楚,但我希望这能给你指明方向。在这个例子中,我使用了问题初稿中的一些类别,我没有选择“P”类别,在这个类别中,你可以使用正则表达式或其他标准来排除花瓣长度,尽管它是以P开头的。