簡體   English   中英

遍歷 r 中列的行名

[英]Iterate over the rownames of a column in r

我想創建一個 function,給定一個字符串,迭代 dataframe 的行名,如果它們相等,則存儲它的值。 在這里我舉一個玩具例子:

Places  x1  x2  x3  x4  x5  
A       0   5   0   0   0
B       0   0   0   23  0
C       23  0   0   0   0
D       8   0   0   0   0

我想要這樣的東西:

sequence <- ("ACF")
function(sequence)
>> 0   5   0   0   0   23  0   0   0   0

“A”在 dataframe 的行名中,“C”也是如此,因此 function 將它們的值存儲在一個新向量中。

codification <- function(sequence) {
  bits <- vector()
  for (i in sequence){
    if (any(rownames(dataframe)==i)){
      bits <- bits.append()
    }
  }
}

我認為 function 的 rest 正在工作,但我找不到任何可以寫入bits <- bits.append()來存儲值的東西。 任何幫助將非常感激。

你不需要 for 循環。 只是一些基地 R。

df <- read.table(text = "Places  x1  x2  x3  x4  x5  
A       0   5   0   0   0
B       0   0   0   23  0
C       23  0   0   0   0
D       8   0   0   0   0", header = TRUE)


codification <- function(sequence){
  unlist(asplit(df[na.omit(match(strsplit(sequence, "")[[1]], df$Places)), -1], 1), use.names = FALSE)
}

codification("ACF")
#>  [1]  0  5  0  0  0 23  0  0  0  0
codification("AACF")
#>  [1]  0  5  0  0  0  0  5  0  0  0 23  0  0  0  0

reprex package (v0.3.0) 創建於 2020-10-24


但是,如果這些實際上是行名,那么您需要:

df <- read.table(text = "  x1  x2  x3  x4  x5  
A       0   5   0   0   0
B       0   0   0   23  0
C       23  0   0   0   0
D       8   0   0   0   0", header = TRUE)


codification <- function(sequence){
  sequence <- strsplit(sequence, "")[[1]]
  sequence <- sequence[sequence %in% rownames(df)]
  unlist(asplit(df[sequence, ], 1), use.names = FALSE)
}

codification("ACF")
#>  [1]  0  5  0  0  0 23  0  0  0  0
codification("AACF")
#>  [1]  0  5  0  0  0  0  5  0  0  0 23  0  0  0  0

reprex package (v0.3.0) 創建於 2020-10-24


無論如何,我建議您創建一個將 df 作為輸入的 function。

codification <- function(sequence, df){
  
  # ...

}

在 function 內部使用外部對象並不是很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM