我有一个称为“数据”的数据框。其中一列称为“奖励”,另一列称为“ 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))
...但是我每个人都有错误。
感谢您的输入!
答案 0 :(得分:1)
在ManyToManyField
中,您可以使用dplyr
和filter
过滤掉!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