R 在子集之后维护一组一致的行
我有一个场景,需要提供一个一致的数据表,并经常刷新 我的源数据可能如下所示:R 在子集之后维护一组一致的行,r,subset,R,Subset,我有一个场景,需要提供一个一致的数据表,并经常刷新 我的源数据可能如下所示: Item | Quantity ------------------- Dog | 2 Cat | 1 Apple | 6 Banana | 2 Kiwi | 4 我只需要从我的来源,可能会或可能不会出现一些项目。 目前,我正在使用子集选择感兴趣的项目: groceries <- subset(data, item == "Apple" |
Item | Quantity
-------------------
Dog | 2
Cat | 1
Apple | 6
Banana | 2
Kiwi | 4
我只需要从我的来源,可能会或可能不会出现一些项目。
目前,我正在使用子集选择感兴趣的项目:
groceries <- subset(data, item == "Apple" |
item == "Orange" |
item == "Banana" |
item == "Kiwi"
)
但是,我需要为源中包含的项目包含空行,以便我的表在刷新之间保持一致:
Item | Quantity
-------------------
Apple | 6
Orange |
Banana | 2
Kiwi | 4
是否有人能指导我如何最好地处理上述问题?我们可以使用merge with all.x=TRUE:
使用来自dplyr包的左_连接也可以实现同样的效果
#raw data
raw_data <- data.frame(raw_quantity = c(1,2,3), item = c("Apple", "Dog", "Lime"))
#parent file
parent_file <- data.frame(parent_quantity = c(0,2,3), item = c("Apple", "Banana", "Kiwi"))
library(dplyr)
x <- left_join(parent_file, raw_data, by = "item")
请注意,left_join保留了连接左侧的所有行,在本例中,这些行是父_文件,将为文档创建一个额外的列raw_quantity,可以通过
x <- x[, c("item", "parent_quantity")]
不合并两个数据帧的另一种选择
library(dplyr)
item <- c("Apple", "Orange", "Banana", "Kiwi")
df1 %>%
filter(Item %in% item) %>%
tidyr::complete(Item = item)
# # A tibble: 4 x 2
# Item Quantity
# <chr> <int>
# 1 Apple 6
# 2 Banana 2
# 3 Kiwi 4
# 4 Orange NA
创建一个包含感兴趣项目的数据框,并与原始数据框合并,而不是子集。类似于mergedf,data.frameItem=c…,by='Item'
x <- x[, c("item", "parent_quantity")]
library(dplyr)
item <- c("Apple", "Orange", "Banana", "Kiwi")
df1 %>%
filter(Item %in% item) %>%
tidyr::complete(Item = item)
# # A tibble: 4 x 2
# Item Quantity
# <chr> <int>
# 1 Apple 6
# 2 Banana 2
# 3 Kiwi 4
# 4 Orange NA
data.frame(Item = item, Quantity = df1$Quantity[match(item, df1$Item)])
# Item Quantity
# 1 Apple 6
# 2 Orange NA
# 3 Banana 2
# 4 Kiwi 4