r - 将数据框的两个列向量转换为单个数值列
问题描述
考虑以下我的种子研究的玩具数据框:
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
非常欢迎所有建议
解决方案
正如 zx8754 提到的,您可以查看一个因子的属性。
year16 <- as.numeric(factor(df$fate1, levels = c("dead", "viable", "germinated")))-1
在这里,我首先重新排序 的级别df$fate1
,因此将 dead 分配给 1,将 viviable 分配给 2 并发芽到 3。您希望从 0 开始序列,因此在将因子转换为数字变量后,我必须减去 1。
推荐阅读
- php - setAttribute 不保存回 XML 页面
- mysql - 如何根据另一个 SELECT 查询的结果对列的值求和?
- angular - Angular Material Chips 显示为矩形,而不是在 sidenav 内被舍入
- javascript - 能够根据要求生成端口
- r - R 正则表达式识别字符串中的 2 或 3 个连续大写单词 [R]
- c - 如何让我的设备对 QEMU 可用
- python - 在python中打开文件时可以指定十六进制作为编码类型吗?
- google-fusion-tables - 拒绝澄清:Maps JavaScript API v3.37 及之前的错误?
- ios - 如何限制 AVAssetWriter 在编码视频时使用过多内存?
- stackdriver - 谷歌堆栈驱动程序缓慢