R 带条件的数据帧
我有以下名为planets.df的数据框: 我想用以下代码获得所有有环的植物,即rings=TRUE:R 带条件的数据帧,r,R,我有以下名为planets.df的数据框: 我想用以下代码获得所有有环的植物,即rings=TRUE: ring.vector <- planets.df$rings planets.with.rings.df <- planets.df[rings.vector,] 有人能告诉我为什么会这样吗?我自己并没有想出这些代码,但我想知道它为什么会起作用。部分[rings.vector]表示环=真 谢谢 rings.vector是一个包含真或假指示符的向量,对应于环列。如果要将这些环子集
ring.vector <- planets.df$rings
planets.with.rings.df <- planets.df[rings.vector,]
有人能告诉我为什么会这样吗?我自己并没有想出这些代码,但我想知道它为什么会起作用。部分[rings.vector]表示环=真
谢谢 rings.vector是一个包含真或假指示符的向量,对应于环列。如果要将这些环子集为真值,则使用[rings.vector]将选择那些rings==TRUE的行和所有列。rings.vector是一个包含与环列对应的真或假指示符的向量。如果您想用真值对这些环进行子集划分,那么使用[rings.vector]将选择那些rings==TRUE的行和所有列。它可以工作,因为在df[中,当您有一个数据帧时,您可以以两种不同的方式引用特定的行和列 您可以使用df[row\u numbers,column\u numbers]或 可以使用布尔变量TRUE/FALSE来指示所需的行/列。使用rings.vector,它将查找与rings.vector中所有真值的索引匹配的行号,并在使用df[rings.vector,]时拉出相应的行。
在上面的示例中,没有检查列中的任何内容,但您需要在括号中使用逗号,以指示逗号之前的对象引用行。出于简单起见,大多数情况下,您仅对行使用布尔值,对列使用特定数字。当您有数据框时,您可以引用特定行s和列2种不同的方式 您可以使用df[row\u numbers,column\u numbers]或 可以使用布尔变量TRUE/FALSE来指示所需的行/列。使用rings.vector,它将查找与rings.vector中所有真值的索引匹配的行号,并在使用df[rings.vector,]时拉出相应的行。
在上面的示例中,没有检查列中的任何内容,但您需要在括号中使用逗号来指示逗号之前的对象指的是行。出于简单起见,大多数情况下,您将只对行使用布尔值,对列使用特定数字。这里是一个小的重复示例。我添加了一些检查ples使用data.table。 请更正错误代码
data <- data.frame(id = 1:100, x = rnorm(100, 100, 50))
data$flag <- ifelse(data$x > 100, TRUE, FALSE)
head(data)
# FALSE can be subseted using 0
data[data == FALSE]
data[data == 0]
str(data$flag)
# As it's of class:
class(data$flag)
# Using Data Table
library("data.table")
DT <- data.table(data)
setkey(DT, flag)
DT[J(FALSE)]
DT[J(TRUE)]
# Aggregate (Group by)
DT[, quantile(x), by = flag]
DT[, list(mean(x),
sum = sum(x),
meadian = median(x))
, by = flag]
这是一个小的可重复的例子。我已经使用data.table添加了一些例子。 请更正错误代码
data <- data.frame(id = 1:100, x = rnorm(100, 100, 50))
data$flag <- ifelse(data$x > 100, TRUE, FALSE)
head(data)
# FALSE can be subseted using 0
data[data == FALSE]
data[data == 0]
str(data$flag)
# As it's of class:
class(data$flag)
# Using Data Table
library("data.table")
DT <- data.table(data)
setkey(DT, flag)
DT[J(FALSE)]
DT[J(TRUE)]
# Aggregate (Group by)
DT[, quantile(x), by = flag]
DT[, list(mean(x),
sum = sum(x),
meadian = median(x))
, by = flag]
另一个角度是使用子集,这相当直观:它只从数据帧中提取条件第二个参数为true的行
planets.with.rings.df <- subset(planets.df, rings == TRUE)
或者干脆
planets.with.rings.df <- subset(planets.df, rings)
第一个解决方案中的==TRUE是多余的,因为您已经在比较布尔向量了!另一个角度是使用子集,这非常直观:它仅从数据帧中提取条件第二个参数为TRUE的行
planets.with.rings.df <- subset(planets.df, rings == TRUE)
或者干脆
planets.with.rings.df <- subset(planets.df, rings)
第一个解决方案中的==TRUE是多余的,因为您已经在比较布尔向量了!感谢您指出这一点,我忘了包括ring.vector。感谢您指出这一点,我忘了包括ring.vector