【发布时间】:2016-12-15 18:35:02
【问题描述】:
我有 2 个不同的数据框,格式如下:
DF1 -
v1 v2 v3 v4 v5
a 1 2 +
b 5 2 + +
c 5 2 + +
d 4 3 + +
e 1 5 + +
f 3 5
g 4 2
h 3 1
i 5 5 + +
DF2 -
v1 v2 v3 v4
a 1 2 +
b 5 2 + +
c 5 2 +
d 4 3 +
e 1 5 +
f 3 5
g 4 2
h 3 1
i 5 5 +
我的脚本给出了 v1 和 v2 的散点图,但首先我删除了 v3-v4 或 v3-v5 中至少有一个“+”的行。
我的数据框可以使用更多的 v1-v2 对更大,但总是有 v3-v4 或 v3-v5 列带有“+”。我手动调整代码以指定要绘制的列以及要删除的行,具体取决于我正在处理的 DF 格式。
效果很好,但我想让脚本更具交互性,如下所示:
# Select v3-v4 or v3-v5 via interactive gui to give vector of column headers.
remove.vars.vector <- select.list(names(DF), # Select columns as vector of column header names via interactive gui.
multiple = TRUE, # Can choose multiple columns.
title = "Choose variables to remove from data set", # Title on gui.
graphics = TRUE) # Allow launch of gui.
# Return columns from DF with this vector of column headers.
remove.vars.subset <- DF[remove.vars.vector]
# Return rows that have at least one "+" in v3-v4 or v3-v5.
remove.vars.subset.+ <- subset(DF, remove.vars.subset == "+")
# Removes all rows that contain >=1 NA.
complete.data.+ <- remove.vars.subset.+[complete.cases(remove.vars.subset.+), ]
# Combine by rows "complete.data.+" with DF.
combo.list <- rbind(DF,complete.data.+)
# Remove duplicate rows from combined data frame.
complete.data <- combo.list[!duplicated(combo.list, fromLast = FALSE) & !duplicated(combo.list, fromLast = TRUE),]
问题:上述代码并未完全剥离 v3-4 或 v3-5 中至少包含一个“+”的行的数据框。问题似乎是这些行:
# Return rows that have at least one "+" in v3-v4 or v3-v5.
remove.vars.subset.+ <- subset(DF, remove.vars.subset == "+")
最后我还得到了一些行,每个单元格中只有 NA,因此在下一行代码中完成了。
因此,最终的数据帧在 v3-4 或 v3-5 中仍然包含一些带有“+”的行。
问题:
有没有更好的方法来使用列标题向量(行中可能包含“+”)来对数据框中的行进行子集化?
提前谢谢你。
编辑 - 09/08/2016 - 18:54 我只是注意到一些我没有澄清我的数据框的东西。有些行在 v3-v4 或 v3-v5 中没有“+”。这些是我最终想要保留的行,以便绘制散点图。我已经相应地编辑了数据框。我只是在寻找答案以尝试理解它们。我对 R 还是很陌生。
【问题讨论】:
标签: r user-interface subset