gpt4 book ai didi

r - 将列名粘贴到 R 中数据框的每个值

转载 作者:行者123 更新时间:2023-12-04 22:56:53 26 4
gpt4 key购买 nike

希望这不是重复 - 我已经搜索过,但找不到我正在寻找的东西。

我在 R 中有一个数据框(df)

  1 2 3 4 5 
1 1 0.5 0.5 0 1
2 0.5 0.5 0.5 0 1
3 1 1 0 0 1
4 1 1 0 0 1
5 1 1 0 0 1

(1-5表示行列名)

我想将列名粘贴到每个单元格中,用“:”分隔,使其看起来像这样:
  1 2 3 4 5 
1 1:1 2:0.5 3:0.5 4:0 5:1
2 1:0.5 2:0.5 3:0.5 4:0 5:1
3 1:1 2:1 3:0 4:0 5:1
4 1:1 2:1 3:0 4:0 5:1
5 1:1 2:1 3:0 4:0 5:1

但是,我的实际数据要大一些。

我目前有
apply(df, 2, function(x) paste(colnames(df)[x], x, sep=":"))

当然,这不起作用,因为 colnames(df)[x] 没有任何意义。
有什么我可以在第一个“粘贴”术语中放入的东西来排序吗?或者其他功能可以做得更好?

谢谢。

最佳答案

为了解释我的评论,Maplapply 的多元版本, 所以

df <- data.frame(`1` = c(1, 0.5, 1, 1, 1), 
`2` = c(0.5, 0.5, 1, 1, 1),
`3` = c(0.5, 0.5, 0, 0, 0),
`4` = c(0L, 0L, 0L, 0L, 0L),
`5` = c(1L, 1L, 1L, 1L, 1L),
check.names = FALSE)

df[] <- Map(paste, names(df), df, sep = ':')

df
## 1 2 3 4 5
## 1 1:1 2:0.5 3:0.5 4:0 5:1
## 2 1:0.5 2:0.5 3:0.5 4:0 5:1
## 3 1:1 2:1 3:0 4:0 5:1
## 4 1:1 2:1 3:0 4:0 5:1
## 5 1:1 2:1 3:0 4:0 5:1

这里 Mapnames(df) 的第一个元素,即 1 , 和 paste s 到 df 的第一个元素,即第一列。分配给 df[]保留列表的 data.frame 类,因此保留原始结构。

如果你的数据是矩阵,你可以用 sweep 做同样的事情:
mat <- matrix(c(1, 0.5, 1, 1, 1, 0.5, 0.5, 1, 1, 1, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), 
5, 5,
dimnames = list(c("1", "2", "3", "4", "5"),
c("1", "2", "3", "4", "5")))

mat[] <- sweep(mat, 2, colnames(df), function(x, y) paste(y, x, sep = ':'))

mat
## 1 2 3 4 5
## 1 "1:1" "2:0.5" "3:0.5" "4:0" "5:1"
## 2 "1:0.5" "2:0.5" "3:0.5" "4:0" "5:1"
## 3 "1:1" "2:1" "3:0" "4:0" "5:1"
## 4 "1:1" "2:1" "3:0" "4:0" "5:1"
## 5 "1:1" "2:1" "3:0" "4:0" "5:1"

关于r - 将列名粘贴到 R 中数据框的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com