【问题标题】:Test whether a specific column/row name is a value in r测试特定列/行名称是否是 r 中的值
【发布时间】:2018-12-11 21:49:30
【问题描述】:

我正在尝试测试一列是否被命名为特定的名称(然后我想对行名做同样的事情)。因此,是否可以遍历每个列名以查看它是否相等?

例子:

dataframe:
      Jan     Feb     Mar
Jan    0       0       0
Feb    0       0       0
Mar    0       0       0

逻辑:遍历每一列以查找是否称为“Jan”,并遍历每一行以查看是否称为“Feb”。如果满足逻辑,则将 1 放入等效的列/行中。例如

Final dataframe:
       Jan     Feb     Mar
Jan    0       0       0
Feb    1       0       0
Mar    0       0       0

谢谢!

【问题讨论】:

  • 类似df1["Feb", "Jan"] <- 1
  • 如果可能的话,我希望它循环播放
  • rownames()colnames() 将为您提供可以循环使用的向量,例如forpurrr::map
  • 我已经发布了一个可以帮助你的答案

标签: r for-loop if-statement dataframe


【解决方案1】:

我已生成您的数据如下:

df<-data.frame("Jan" = rep(x = 0,times = 3),"Feb" = rep(x = 0,times = 3),"Mar" = rep(x = 0,times = 3))
rownames(df)<-c("Jan","Feb","Mar")

这给出了以下数据框:

    Jan Feb Mar
Jan   0   0   0
Feb   0   0   0
Mar   0   0   0

以下显式函数应该可以帮助您:

set_func<-function(dt,col,row){
  nm_col<-colnames(dt)
  nm_row<-rownames(dt)
  if(col %in% nm_col){
    col_id<-which(nm_col == col)
  }
  else {
    cat(col,"is not present as a column name in the input data\n")
  }
  if(row %in% nm_row){
    row_id<-which(nm_row == row)
  }
  else {
    cat(row,"is not present as a row name in the input data\n")
  }
  if(exists("col_id") == T & exists("row_id") == T){
    dt[row_id,col_id]<-1
  }
  return(dt)
}

函数的参数是:

dt - 您的输入数据框
col - 您在列名中检查的值
row - 您在行名中检查的值

在您的示例中使用此函数会产生以下结果:

> set_func(dt = df,col = "Jan",row = "Feb")
    Jan Feb Mar
Jan   0   0   0
Feb   1   0   0
Mar   0   0   0

但是,如果您检查的值不作为列名或行名存在,则会打印一条消息,通知您该值不存在。

> set_func(dt = df,col = "Apr",row = "Mar")
Apr is not present as a column in the input data
    Jan Feb Mar
Jan   0   0   0
Feb   0   0   0
Mar   0   0   0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 2021-09-14
    • 2011-03-16
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多