【问题标题】:Check if vector have same names in a list of names and keep only the names that verify the condition in my vector检查向量在名称列表中是否具有相同的名称,并仅保留验证向量中条件的名称
【发布时间】:2020-11-27 02:50:06
【问题描述】:

我有一个名为 liste 的字母列表和一个名为 myvec 的向量、一个数据框和另一个向量 ind1,如下所示

###############
## my sample ##
###############
liste=LETTERS[seq( from = 1, to = 10 )]
df1=data.frame(ID1=seq(from=1,to=3,by=1),
               A=c(rep(1,3)),
               B=c(rep(2,3)),
               D=c(rep(3,3)),
               F=c(rep(4,3)),
               G=c(rep(5,3)))
myvec=c("A","B","G")
ind1=c(1,2,2,3,5,6)
names(ind1)=c("ID2","A","B","C","D","G")

ind1
ID2   A   B   C   D   G 
  1   2   2   3   5   6 

df1
  ID1 A B D F G
1   1 1 2 3 4 5
2   2 1 2 3 4 5
3   3 1 2 3 4 5

 liste
 "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

我想要做的是(我在写帖子时弄清楚了 3 个第一次检查,但不是最后一次):

1- 检查df1 的名称是否在myvec 中:对于我的示例,由于 A B G,它将给出TRUE。

2- 检查myvec 是否包含在liste 中,然后我想在我的df1 中只保留验证此条件的名称子集。

3- 对我的向量 ind1 进行同样的 2 次检查。

我能够为ind1 进行 3 次检查,但不是最后一次。

预期的输出将是:

# check 1
# no problem
 any(myvec %in% names(df1))
 [1] TRUE

# check 2
# no problem 

if(any(myvec %in% liste)){
  df1=cbind(df1[1],df1[,names(df1) %in% myvec])
}
  ID1 A B G
1   1 1 2 5
2   2 1 2 5
3   3 1 2 5

# check 3
# no rpoblem
 any(myvec %in% names(ind1))
[1] TRUE

# check 4
# where i got stocked i tried to repeat the same code in check 2 but i got an error for dimension in vector
# expected output 
ind1
ID2   A   B   G 
  1   2   2   6 

我们将不胜感激任何有关处理向量中名称的帮助或资源。提前谢谢你

【问题讨论】:

  • 您好,只是指出一个小技术点,不会影响您的结果。您的“检查1”解决方案实际上是检查names(df1) 中是否有任何myvec 值,而不是myvec 中的任何names(df1)。这就像在一个句子中交换主语和宾语。不过,您的“检查 2”解决方案设置正确。
  • @RonakShah,我认为“D”不包含在她的“检查 4”输出中,因为它不在 myvec 中。我认为她想将ind1 重新分配为原始ind1,并选择名称在myvec 中的数据列。
  • 'D' 不包括在内,因为正如@LC-datascientist 所说,它在myvec 中不存在
  • 感谢@LC-datascientist 指出这一点!我没有意识到。所以这同样适用于检查 3。谢谢!

标签: r contains names


【解决方案1】:

这是你要找的吗?

if(any(myvec %in% liste)){
  ind1=c(ind1[1],ind1[names(ind1) %in% myvec])
}

【讨论】:

  • 这正是我一直在寻找的,我犯了错误ind1[,names(ind1) %in% myvec],这给了我错误incorrect number of dimensions。谢谢@ekoam
猜你喜欢
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2016-02-02
  • 2019-02-14
相关资源
最近更新 更多