Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带条件的数据帧_R - Fatal编程技术网

R 带条件的数据帧

R 带条件的数据帧,r,R,我有以下名为planets.df的数据框: 我想用以下代码获得所有有环的植物,即rings=TRUE: ring.vector <- planets.df$rings planets.with.rings.df <- planets.df[rings.vector,] 有人能告诉我为什么会这样吗?我自己并没有想出这些代码,但我想知道它为什么会起作用。部分[rings.vector]表示环=真 谢谢 rings.vector是一个包含真或假指示符的向量,对应于环列。如果要将这些环子集

我有以下名为planets.df的数据框:

我想用以下代码获得所有有环的植物,即rings=TRUE:

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