gpt4 book ai didi

r - R 中的 "Embedded"data.frame。它是什么,它叫什么,为什么它的行为方式如此?

转载 作者:行者123 更新时间:2023-12-04 01:12:21 25 4
gpt4 key购买 nike

我在 R 中有以下数据结构:

df <- structure(
list(
ID = c(1L, 2L, 3L, 4L, 5L),
var1 = c('a', 'b', 'c', 'd', 'e'),
var2 = structure(
list(
var2a = c('v', 'w', 'x', 'y', 'z'),
var2b = c('vv', 'ww', 'xx', 'yy', 'zz')),
.Names = c('var2a', 'var2b'),
row.names = c(NA, 5L),
class = 'data.frame'),
var3 = c('aa', 'bb', 'cc', 'dd', 'ee')),
.Names = c('ID', 'var1', 'var2', 'var3'),
row.names = c(NA, 5L),
class = 'data.frame')

# Looks like this:
# ID var1 var2.var2a var2.var2b var3
# 1 1 a v vv aa
# 2 2 b w ww bb
# 3 3 c x xx cc
# 4 4 d y yy dd
# 5 5 e z zz ee
这看起来像一个普通的数据框,并且在大多数情况下表现得像这样;但见 lengthclass以下列的属性:
class(df)
# [1] "data.frame"

df[1,]
# ID var1 var2.var2a var2.var2b var3
# 1 a v vv aa

dim(df)
# [1] 5 4
# One less than expected due to embedded data frame

lapply(df, class)
# $ID
# [1] "integer"
#
# $var1
# [1] "character"
#
# $var2
# [1] "data.frame"
#
# $var3
# [1] "character"

lapply(df, length)
# $ID
# [1] 5
#
# $var1
# [1] 5
#
# $var2
# [1] 2
#
# $var3
# [1] 5
# str(df)

# 'data.frame': 5 obs. of 4 variables:
# $ ID : int 1 2 3 4 5
# $ var1: chr "a" "b" "c" "d" ...
# $ var2:'data.frame': 5 obs. of 2 variables:
# ..$ var2a: chr "v" "w" "x" "y" ...
# ..$ var2b: chr "vv" "ww" "xx" "yy" ...
# $ var3: chr "aa" "bb" "cc" "dd" ...
我的问题:
1)这是什么?
我以前从未遇到过这种情况。对于你们中的一些人来说,这是一种常见的格式吗?什么是潜在用例?
2)这叫什么?
我称之为“嵌入式”,因为没有更好的词。有人建议“嵌套”,但我认为这是不对的,请参阅 tidyverse 的单独部分 tibble s 下面。
3)为什么允许?
我本来以为 structure上面的命令失败,因为我认为 data.frames 本质上是列表,其中每个元素(列)具有相同数量的元素(行)。在本例中似乎违反了这条规则,如 var2length = 2 (列数!)。然而,子集 df以通常的方式出人意料地成功:
df[3,]
# ID var1 var2.var2a var2.var2b var3
# 3 3 c x xx cc
这是怎么回事?

我不认为我可以称之为“嵌套”结构,该术语用于嵌套 data.frames它的外观和行为如下:
library(tidyverse)
df <- data_frame(
x = c(1L, 2L, 3L),
nested = list(data_frame(x = c('a', 'b', 'c')),
data_frame(x = c('a', 'b', 'c')),
data_frame(x = c('d', 'e', 'f'))))
unnest(df)
# # A tibble: 9 × 2
# x x
# <int> <chr>
# 1 1 a
# 2 1 b
# 3 1 c
# 4 2 a
# 5 2 b
# 6 2 c
# 7 3 d
# 8 3 e
# 9 3 f

最佳答案

我认为结构很清楚

str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ ID : int 1 2 3 4 5
# $ var1: chr "a" "b" "c" "d" ...
# $ var2:'data.frame': 5 obs. of 2 variables:
# ..$ var2a: chr "v" "w" "x" "y" ...
# ..$ var2b: chr "vv" "ww" "xx" "yy" ...
# $ var3: chr "aa" "bb" "cc" "dd" ...

它是一个带有包含 data.frame 的列 ( var2 ) 的 data.frame。这不是很容易创建,所以我不太确定你是如何做到的,但在 R 中它在技术上并不是“非法的”。

data.frames 可以包含矩阵和其他 data.frames。所以它不只是看 length()元素中,它查看 dim()元素以查看它是否具有正确数量的“行”。

我经常使用“修复”或扩展这些 data.frames
fixed <- do.call("data.frame", df)

关于r - R 中的 "Embedded"data.frame。它是什么,它叫什么,为什么它的行为方式如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43281803/

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