gpt4 book ai didi

r - 使用循环时的 tbl_df 和 data.frame 差异

转载 作者:行者123 更新时间:2023-12-04 18:39:50 26 4
gpt4 key购买 nike

我一直在循环 dplyr tbl_df 中的值,试图打印两列的唯一组合。经过多次反复试验,我只能通过将 tbl_df 转换回标准 data.frame 来准确获得所需的输出。我知道这两种结构之间的主要区别,但我仍然无法理解我看到的不同输出。

例如,使用此数据

hospital <- rep(c("Hospital 1", "Hospital 2", "Hospital 3"), 3)
ward <- LETTERS[1:2]
hospitals <- data.frame(cbind(hospital, ward))
hospitals[order(hospitals$hospital, hospitals$ward), ]

# hospital ward
# 1 Hospital 1 A
# 7 Hospital 1 A
# 4 Hospital 1 B
# 5 Hospital 2 A
# 2 Hospital 2 B
# 8 Hospital 2 B
# 3 Hospital 3 A
# 9 Hospital 3 A
# 6 Hospital 3 B

和以下循环
for(hosp in unique(hospitals$hospital)){
for(wa in unique(hospitals[hospitals$hospital==hosp, "ward"])){
print(paste(hosp, wa, sep=" "))
}
}

我可以得到我想要的输出
#[1] "Hospital 1 A"
#[1] "Hospital 1 B"
#[1] "Hospital 2 B"
#[1] "Hospital 2 A"
#[1] "Hospital 3 A"
#[1] "Hospital 3 B"

但是使用相同数据的 tbl_df 我得到不同的输出
hospitals2 <- tbl_df(hospitals)

for(hosp in unique(hospitals2$hospital)){
for(wa in unique(hospitals2[hospitals2$hospital==hosp, "ward"])){
print(paste(hosp, wa, sep=" "))
}
}


#[1] "Hospital 1 A" "Hospital 1 B"
#[1] "Hospital 2 B" "Hospital 2 A"
#[1] "Hospital 3 A" "Hospital 3 B"

这不仅仅是打印差异,这似乎是三个二元素向量而不是六个一元素向量,并且我的后续代码仅在我在普通数据帧上运行循环时按预期工作。

谁能解释为什么我看到这些差异?

最佳答案

你做不到for looptbl_df带子集 [ .文档说明了一切:

[ Never simplifies (drops), so always returns data.frame.



你看 hospitals2[hospitals2$hospital==hosp, "ward"]返回 data.frame
hospitals2[hospitals2$hospital==hosp, "ward"]
#Source: local data frame [3 x 1]

# ward
#1 A
#2 B
#3 A

然而
hospitals[hospitals$hospital==hosp, "ward"]
#[1] A B A
#Levels: A B

使用 [[提取列向量,例如
for(hosp in unique(hospitals2$hospital)){
for(wa in unique(hospitals[hospitals$hospital==hosp,][["ward"]])){
print(paste(hosp, wa, sep=" "))
}
}
#[1] "Hospital 1 A"
#[1] "Hospital 1 B"
#[1] "Hospital 2 B"
#[1] "Hospital 2 A"
#[1] "Hospital 3 A"
#[1] "Hospital 3 B"

关于r - 使用循环时的 tbl_df 和 data.frame 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com