首页 > 解决方案 > 将数据框的两个列向量转换为单个数值列

问题描述

考虑以下我的种子研究的玩具数据框:

site <- c(LETTERS[1:12])          
site1 <- rep(site,each=80)

fate <- c('germinated', 'viable', 'dead')
fate1 <- rep(fate,each=320)

number <- c(41:1000)

df <- data.frame(site1,fate1,number)

> str(df)
'data.frame':   960 obs. of  3 variables:
 $ site1 : Factor w/ 12 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ fate1 : Factor w/ 3 levels "dead","germinated",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ number: int  41 42 43 44 45 46 47 48 49 50 ...

我希望 R 遍历所有“死”的观察并将“0”分配给每个观察。同样,我想将“1”分配给所有“可行”的观察结果,将“2”分配给所有“发芽的”观察结果。

我的最终数据框将是一列,有点像这样:

> year16
  [1] 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0
 [38] 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1

非常欢迎所有建议

标签: rdataframenumericlevels

解决方案


正如 zx8754 提到的,您可以查看一个因子的属性。

year16 <- as.numeric(factor(df$fate1, levels = c("dead", "viable", "germinated")))-1

在这里,我首先重新排序 的级别df$fate1,因此将 dead 分配给 1,将 viviable 分配给 2 并发芽到 3。您希望从 0 开始序列,因此在将因子转换为数字变量后,我必须减去 1。


推荐阅读