我有一些使用不同变量名称的DF,但是它们具有相同的内容。不幸的是,我的文件没有模式,但是我现在正在尝试对其进行标准化。例如,我有这四个DF,我只选择一个变量:
KEY_WIN <- c(123,456,789)
COUNTRY <- c("USA","FRANCE","MEXICO")
DF1 <- data.frame(KEY_WIN,COUNTRY)
KEY_WINN <- c(12,55,889)
FOOD <- c("RICE","TOMATO","MANGO")
CAR <- c("BMW","FERRARI","TOYOTA")
DF2 <- data.frame(KEY_WINN,FOOD,CAR)
ID <- c(555,698,33)
CITY <- c("NYC","LONDON","PARIS")
DF3 <- data.frame(ID,CITY)
NUMBER <- c(3,436,1000)
OCEAN <- c("PACIFIC","ATLANTIC","INDIAN")
DF4 <- data.frame(NUMBER,OCEAN)
我想创建一个例程以仅选择变量KEY_WIN,KEY_WINN,ID和NUMBER。我的预期结果将是:
DF_FINAL<- data.frame(KEY=c(123,456,789, 12,55,889, 555,698,33, 3,436,1000))
我如何只选择那些变量?
答案 0 :(得分:1)
我想您可以通过多种方式来实现这一目标。
首先,您可以将数据框放在列表中:
listofDF <- list(DF1, DF2, DF3, DF4)
然后,您可以bind_rows
将数据帧添加在一起,然后coalesce
合并为一列。
library(tidyverse)
bind_rows(listofDF) %>%
mutate(KEY = coalesce(KEY_WIN, KEY_WINN, ID, NUMBER)) %>%
select(KEY)
KEY
1 123
2 456
3 789
4 12
5 55
6 889
7 555
8 698
9 33
10 3
11 436
12 1000
如果您知道 first 列始终是您的KEY
列,则可以执行以下操作:
KEY = unlist(lapply(listofDF, "[[", 1))
这将从所有数据框中提取第一列:
[1] 123 456 789 12 55 889 555 698 33 3 436 1000