子集数据框以排除与NA相同的行中的值

时间:2018-08-05 23:03:28

标签: r select subset na

我有一个称为“数据”的数据框。其中一列称为“奖励”,另一列称为“ X.targetResp”。我想创建一个新的数据框,称为“奖励”,它包含“数据”中“奖励”列中的所有值。但是,我想排除“奖励”列中与“数据”的“ X.targetResp”列中的NA值相同的行中的值。

我尝试了以下操作:

reward <- data$reward %in% filter(!is.na(data$X.targetResp))
reward <- subset(data, reward, !(X.targetResp=="NA"))
reward <- subset(data, reward, !is.na(X.targetResp))

...但是我每个人都有错误。

感谢您的输入!

2 个答案:

答案 0 :(得分:1)

ManyToManyField中,您可以使用dplyrfilter过滤掉!is.na()中带有NA的那些,然后使用X.targetResp函数来选择select列。

reward

这是具有类似逻辑的基本R解决方案。

library(dplyr)

# Create example data frame
dat <- data_frame(reward = 1:5,
                  X.targetResp = c(2, 4, NA, NA, 10))

# Print the data frame
dat
# # A tibble: 5 x 2
#   reward X.targetResp
#    <int>        <dbl>
# 1      1            2
# 2      2            4
# 3      3           NA
# 4      4           NA
# 5      5           10

# Use the filter function
reward <- dat %>%
  filter(!is.na(X.targetResp)) %>%
  select(reward)
reward
# # A tibble: 3 x 1
# reward
#    <int>
# 1      1
# 2      2
# 3      5

您还可以考虑在subset(dat, !is.na(X.targetResp), "reward") # A tibble: 3 x 1 reward # <int> # 1 1 # 2 2 # 3 5 的{​​{1}}上使用drop_na

X.targetResp

这里是tidyr软件包的示例。

library(dplyr)
library(tidyr)
reward <- dat %>%
  drop_na(X.targetResp) %>%
  select(reward)
reward
# # A tibble: 3 x 1
#   reward
#    <int>
# 1      1
# 2      2
# 3      5

答案 1 :(得分:1)

您可以简单地使用na.omit来解决此问题:

# replicating the same example data frame given by @www
data <- data.frame(
  reward = 1:5,
  X.targetResp = c(2, 4, NA, NA, 10)
)

# omitting the rows containing NAs
reward <- na.omit(data)

# resulting data frame with both columns
reward
#   reward X.targetResp
# 1      1            2
# 2      2            4
# 5      5           10

# you can easily extract the first column if necessary
reward[1]
#   reward
# 1      1
# 2      2
# 5      5

关注@www的评论:

如果还有其他要闪避的列:

# omitting the rows where only X.targetResp is NA
reward <- data[complete.cases(data["X.targetResp"]),  ]

# resulting data frame with both columns
reward
#   reward X.targetResp
# 1      1            2
# 2      2            4
# 5      5           10

# you can easily extract the first column if necessary
reward[1]
#   reward
# 1      1
# 2      2
# 5      5