【发布时间】:2021-12-12 15:30:21
【问题描述】:
我检查了答案
How to extract specific element from vector using for loop in R
但这不是我想要的 我的数据包含 17 行和变量
编辑 1:我的目标是 1- 从向量中取变量名: 2-使用数据框计算向量中每个变量的总和 3-只保留每个向量中总和最大的变量 所以我有包含所有变量的数据,我的目标是让 new_data 只包含每个向量中总和最高的变量
只包含 我有一个每次使用 for 循环生成的向量,它包含变量的名称(不同的名称取决于 for 循环内的条件)
我的目标是消除每个向量中的变量名称,但总和最高的向量除外
例如我有这个数据框:
my_data >
NAMES A B C D E F
One 1 2 3 4 5 6
Two 2 3 4 5 6 7
THREE 3 4 5 6 7 8
FOUR 4 5 6 7 8 9
FIVE 5 6 7 8 9 10
SIX 6 7 8 9 10 11
假设 for 循环生成的第一个向量包含名称:
vec >
"B" "C" "D"
因此,使用这些变量,程序将消除“B”和“C”,因为 D 是总和最高的那个:
所以我会得到
New_data
NAMES A D E F
One 1 4 5 6
Two 2 5 6 7
THREE 3 6 7 8
FOUR 4 7 8 9
FIVE 5 8 9 10
SIX 6 9 10 11
假设第二个向量包含这些名称 "A" , "E" 所以程序将消除 A,因为 E 是总和最高的变量
所以
New data >
NAMES D E F
One 4 5 6
Two 5 6 7
THREE 6 7 8
FOUR 7 8 9
FIVE 8 9 10
SIX 9 10 11
假设第三个向量包含“E”和“F”
这是我使用的向量分析程序代码的一部分:
#This is how i generated the vector
vec <- names(Filter(function(x) x > 0, rowSums(tmp) > 0 |
#Vector generated by for loop
my_data %>%
dplyr::select(all_of(vec)) %>% # select vector items
slice(-17) %>% # remove 17 line
map_dbl(sum) %>% # make sum
which.max() %>% # select max
names() -> selected # select max name
#in the variable selected i have the name of variable i should keep
my_data %>% dplyr::select(!vec,selected) -> new_data# select columns
}
这个程序的问题是最后我的 new_data 包含除了最后一个比较之外的所有变量,因为它总是使用我的数据,所以在最后一个比较中它比较我最后一个向量中的变量并将所有变量保留在new_data 中的 my_data 除了我最后一个向量中没有最高和的变量
所以继续我之前开始的例子: 假设第三个向量包含“E”和“F”:
我需要得到的结果是:
新数据 >
NAMES D F
One 4 6
Two 5 7
THREE 6 8
FOUR 7 9
FIVE 8 10
SIX 9 11
#我淘汰了E,因为F的总和最高
但是我写的程序给了我这个结果:
NAMES A B C D F
One 1 2 3 5 6
Two 2 3 4 6 7
THREE 3 4 5 7 8
FOUR 4 5 6 8 9
FIVE 5 6 7 9 10
SIX 6 7 8 10 11
我认为是因为程序从我的第一个数据中获取了信息,并且它保留了所有不在我的向量中的变量(这就是为什么在最后的比较中它保留 A B C D )
所以现在我不知道如何解决这个问题 如果您需要更多信息,请告诉我
【问题讨论】:
标签: r for-loop select vector dplyr