我有一个数据集,我在RStudio中加载,包含6个输入功能和2个输出,有4000个观察。我想从这个数据构建另一个包含5个输入要素的固定值的数据集,并且只有一个输入变化。让我们说我的数据是由:
In1 In2 In3 In4 In5 In6 Out1 Out2
4 3 2 4 2 10 0.4 0.5
4 3 2 3 2 7 0.6 0.8
2 3 1 4 2 9 0.2 0.1
4 3 2 4 2 8 0.8 0.7
4 5 6 4 2 1 0.9 0.1
4 3 2 4 2 3 0.4 0.5
我想获得的是(除了In6,所有输入都是常数)
In1 In2 In3 In4 In5 In6 Out1 Out2
4 3 2 4 2 10 0.4 0.5
4 3 2 4 2 8 0.8 0.7
4 3 2 4 2 3 0.4 0.5
我怎样才能在R中这样做? 非常感谢你的帮助。
答案 0 :(得分:1)
这会从输入中产生请求的输出,但我不知道它是否适用于更广泛的情况。
首先,我定义数据框df
df <- read.table(text = "In1 In2 In3 In4 In5 In6 Out1 Out2
4 3 2 4 2 10 0.4 0.5
4 3 2 3 2 7 0.6 0.8
2 3 1 4 2 9 0.2 0.1
4 3 2 4 2 8 0.8 0.7
4 5 6 4 2 1 0.9 0.1
4 3 2 4 2 3 0.4 0.5", header = TRUE)
然后,我在第1列到第5列中查找重复的行。
df[duplicated(df[, 1:5])|duplicated(df[, 1:5], fromLast = TRUE),]
# In1 In2 In3 In4 In5 In6 Out1 Out2
# 1 4 3 2 4 2 10 0.4 0.5
# 4 4 3 2 4 2 8 0.8 0.7
# 6 4 3 2 4 2 3 0.4 0.5
这会尝试所有可能的输入组合。我找到了6个输入中5列的所有可能组合。
col_combinations <- combn(1:6, 5)
然后,我测试每个。
apply(col_combinations, MAR = 2,
function(x)df[duplicated(df[, x])|duplicated(df[, x], fromLast = TRUE),])
如您所见,只有一个是成功的。
# [[1]]
# In1 In2 In3 In4 In5 In6 Out1 Out2
# 1 4 3 2 4 2 10 0.4 0.5
# 4 4 3 2 4 2 8 0.8 0.7
# 6 4 3 2 4 2 3 0.4 0.5
#
# [[2]]
# [1] In1 In2 In3 In4 In5 In6 Out1 Out2
# <0 rows> (or 0-length row.names)
#
# [[3]]
# [1] In1 In2 In3 In4 In5 In6 Out1 Out2
# <0 rows> (or 0-length row.names)
#
# [[4]]
# [1] In1 In2 In3 In4 In5 In6 Out1 Out2
# <0 rows> (or 0-length row.names)
#
# [[5]]
# [1] In1 In2 In3 In4 In5 In6 Out1 Out2
# <0 rows> (or 0-length row.names)
#
# [[6]]
# [1] In1 In2 In3 In4 In5 In6 Out1 Out2
# <0 rows> (or 0-length row.names)
答案 1 :(得分:1)
df = read.table(text = "
In1 In2 In3 In4 In5 In6 Out1 Out2
4 3 2 4 2 10 0.4 0.5
4 3 2 3 2 7 0.6 0.8
2 3 1 4 2 9 0.2 0.1
4 3 2 4 2 8 0.8 0.7
4 5 6 4 2 1 0.9 0.1
4 3 2 4 2 3 0.4 0.5
", header=T)
library(dplyr)
df %>%
group_by(In1,In2,In3,In4,In5) %>% # for those variables
mutate(n = n()) %>% # count number of combination and add it as a column
ungroup() %>% # forget the grouping
filter(n == max(n)) %>% # return the rows with the most popular combination
select(-n) # remove the counts
# # A tibble: 3 x 8
# In1 In2 In3 In4 In5 In6 Out1 Out2
# <int> <int> <int> <int> <int> <int> <dbl> <dbl>
# 1 4 3 2 4 2 10 0.4 0.5
# 2 4 3 2 4 2 8 0.8 0.7
# 3 4 3 2 4 2 3 0.4 0.5
这种方法假设您总是拥有一个胜利者组合,并且您只关心该胜利者组合。