我有一个 data.frame
由(最初)一个观察值组成。
从原始数据中,我有一个列表(更具体地说,一个字符向量)应该作为一个新列附加到 data.frame 并包含在一个元素中。
具体来说,我有这个 data.frame:
> str(stats.df)
'data.frame': 1 obs. of 174 variables:
$ stat.mineBlock.minecraft.furnace : num 1
$ stat.useItem.minecraft.fence_gate : num 1
$ stat.useItem.minecraft.stone_brick_stairs : num 3
$ stat.killEntity.Sheep : num 20
$ stat.useItem.minecraft.cobblestone : num 18
我想添加以下内容:
> str(stats.list$achievement.exploreAllBiomes$progress)
chr [1:6] "Desert" "Extreme Hills" "Ocean" "Extreme Hills Edge" "River" "Hell"
这样
> stats.df$achievement.exploreAllBiomes.progress
[1] "Desert" "Extreme Hills" "Ocean" "Extreme Hills Edge"
[5] "River" "Hell"
因为 stats.list$achievement.exploreAllBiomes
包含元素:value
,这是一个数字,progress
, 这是一个字符向量。我想要我的 stats.df
将其中的每一个包含为单独的列。
我的问题是 data.frame 扩展了字符向量的每个元素的附加行,因此 data.frame 的每一行都是相同的,并且仅在 achievement.exploreAllBiomes.progress
中有所不同。字段,其中每一行包含所述向量的一个元素。
我已经尝试了以下 3 个三件事,使用和不使用 I()
:
stats.df$achievement.exploreAllBiomes.progress <- I(stats.list$achievement.exploreAllBiomes$progress)
stats.df$achievement.exploreAllBiomes.progress[1] <- I(stats.list$achievement.exploreAllBiomes$progress)
cbind(stats.df, achievement.exploreAllBiomes.progress = I(stats.list$achievement.exploreAllBiomes$progress))
接收其中之一
Error in `$<-.data.frame`(`*tmp*`, "achievement.exploreAllBiomes.progress", :
replacement has 6 rows, data has 1
或重复行变体。
我假设 I()
可以解决问题,但它似乎只在从头开始构建 data.frame 时有效,所以我尝试构建 stats.df
考虑到这一点:
stats.df <- data.frame(stats.list[names(stats.list) != "achievement.exploreAllBiomes"],
achievement.exploreAllBiomes.value = stats.list$achievement.exploreAllBiomes$value,
achievement.exploreAllBiomes.progress = I(stats.list$achievement.exploreAllBiomes$progress))
但这又产生了重复的行。 我知道 data.frame 中的元素可能包含向量或列表,所以我认为必须有一种相当简单的方法来实现这一点,我可能只是没有看到。
最佳答案
以下是您可以如何做到这一点:
stats.df <- data.frame(stat.mineBlock.minecraft.furnace = 3,
stat.useItem.minecraft.fence_gate = 5)
stats.list <- c("Desert", "Extreme Hills", "Ocean", "Extreme Hills Edge", "River", "Hell")
stats.df$achievement.exploreAllBiomes.progress <- I(list(stats.list))
stats.df$ach[[1]]
#[1] "Desert" "Extreme Hills" "Ocean"
#[4] "Extreme Hills Edge" "River" "Hell"
str(stats.df)
#'data.frame': 1 obs. of 3 variables:
# $ stat.mineBlock.minecraft.furnace : num 3
# $ stat.useItem.minecraft.fence_gate : num 5
# $ achievement.exploreAllBiomes.progress:List of 1
# ..$ : chr "Desert" "Extreme Hills" "Ocean" "Extreme Hills Edge" ...
# ..- attr(*, "class")= chr "AsIs"
关于r - 按原样添加矢量作为 data.frame 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23756005/