Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在子集之后维护一组一致的行_R_Subset - Fatal编程技术网

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