library(tidyverse)
df0 <- data.frame(col1 = c(5, 2), col2 = c(6, 4))
df1 <- data.frame(col1 = c(5, 2),
col2 = c(6, 4),
col3 = ifelse(apply(df0[, 1:2], 1, sum) > 10 &
df0[, 2] > 5,
"True",
"False"))
df2 <- as_tibble(df1)
我上面有数据框df1
。我基本上已经将其“复制”为小标题df2
。让我们模拟一下对此df1
数据帧和df2
的小节的分析。
identical(df1[[2]], df1[, 2])
# [1] TRUE
identical(df2[[2]], df2[, 2])
# [1] FALSE
由于df1
和df2
本质上是“相同”的,所以为什么在上面的代码块中得到TRUE / FALSE二分法。已更改的tibble()
属性是什么?
同一个问题提出了另一种方式-[[X]]
和[, X]
之间的区别是什么,当应用于基数R时,以及在整联中使用时,
答案 0 :(得分:3)
由于所有列表都是向量,因此我们可以从列表子集的角度来考虑。例如:
L <- list(A = c(1, 2), B = c(1, 4))
L[[2]]
Extract
是列表的第二个元素。推断为:
df1[[2]]
我们得到与df1[, 2]
相同的输出,因此identical(df1[[2]], df1[, 2])
返回TRUE
。
第二部分与tibble
结构有关,即:
typeof(as_tibble(df1)[[2]])
[1] "double"
typeof(as_tibble(df1[, 2]))
[1] "list"
第二个是list
,而first
是向量,因此identical
返回FALSE
。
tbl_df类的对象具有:(来自文档)
c("tbl_df", "tbl", "data.frame")
的类属性。
“列表”的基本类型,其中列表的每个元素都具有相同的NROW()。
名称属性,它是与基础列表长度相同的字符向量。
一个row.names属性,为了与基础data.frame类兼容而包括在内。仅在查询行数时才查询该属性,大多数tibble方法都会忽略可能存储在其中的任何行名。