转置数据框,将第一列保持为标题

发布于 2024-12-13 12:20:04 字数 297 浏览 0 评论 0原文

我有一个大数据框,但小例子如下:

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))

我想转置数据框并将列 1 (A) 维护为列标题(字母 [1:10])作为变量名称。以下是不成功代码的临时尝试。

tmydf = data.frame(t(mydf))
names(tmydf) <- tmydf[1,]

谢谢;

I have a big dataframe, but small example would be like this:

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))

I want to transpose the dataframe and maintain the column 1 (A) as column heading ( letter[1:10]) as variable names. The following are scratch trials of unsuccessful codes.

tmydf = data.frame(t(mydf))
names(tmydf) <- tmydf[1,]

Thanks;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

唯憾梦倾城 2024-12-20 12:20:04

这是一种方法

tmydf = setNames(data.frame(t(mydf[,-1])), mydf[,1])

Here is one way

tmydf = setNames(data.frame(t(mydf[,-1])), mydf[,1])
倚栏听风 2024-12-20 12:20:04

也许是这样的:

tmp <- as.data.frame(t(mydf[,-1]))
> colnames(tmp) <- mydf$A
> tmp
    a  b  c  d  e  f  g  h  i  j
M1 11 12 13 14 15 16 17 18 19 20
M2 31 32 33 34 35 36 37 38 39 40
M3 41 42 43 44 45 46 47 48 49 50

Something like this perhaps:

tmp <- as.data.frame(t(mydf[,-1]))
> colnames(tmp) <- mydf$A
> tmp
    a  b  c  d  e  f  g  h  i  j
M1 11 12 13 14 15 16 17 18 19 20
M2 31 32 33 34 35 36 37 38 39 40
M3 41 42 43 44 45 46 47 48 49 50
厌倦 2024-12-20 12:20:04

您可以使用 tidyr 包中的 pivot_longerpivot_wider 函数。

library(tidyr)
mydf%>%
  pivot_longer(cols=c(-A),names_to="Original_Vars")%>%
  pivot_wider(names_from=c(A))

pivot_longer 创建一个名为“Original_Vars”的列,以及一个名为 value 的新列。如果您停在这里,您的 A 变量、“Original_Vars”(此处为 M1、M2 和 M3)以及与该配对关联的值的每个组合都会有一行。

然后,pivot_wider 从“A”列中获取所有值,并使用我们通过 pivot_longervalue 列中的值将它们转换为列> 来填写。

You can use the pivot_longer and pivot_wider functions from the tidyr package.

library(tidyr)
mydf%>%
  pivot_longer(cols=c(-A),names_to="Original_Vars")%>%
  pivot_wider(names_from=c(A))

The pivot_longer makes a column called "Original_Vars", and a new column called value. If you stopped here, you'd have a row for each combination of your A variable, your "Original_Vars" (being M1, M2, and M3 here), and the value associated with that pairing.

The pivot_wider then takes all your values from the "A" column and turns them into columns, using the values from the value column we created with pivot_longer to fill in.

轻许诺言 2024-12-20 12:20:04

另一种将 janitor::row_to_names()dplyr/magrittr 管道结合使用的方法

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))


library(janitor, warn.conflicts = F)
library(dplyr, warn.conflicts = F)
mydf %>% t %>% as.data.frame() %>% row_to_names(1)

#>     a  b  c  d  e  f  g  h  i  j
#> M1 11 12 13 14 15 16 17 18 19 20
#> M2 31 32 33 34 35 36 37 38 39 40
#> M3 41 42 43 44 45 46 47 48 49 50

reprex 包 (v2.0.0)

One more way using janitor::row_to_names() with dplyr/magrittr pipes

mydf <- data.frame(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))


library(janitor, warn.conflicts = F)
library(dplyr, warn.conflicts = F)
mydf %>% t %>% as.data.frame() %>% row_to_names(1)

#>     a  b  c  d  e  f  g  h  i  j
#> M1 11 12 13 14 15 16 17 18 19 20
#> M2 31 32 33 34 35 36 37 38 39 40
#> M3 41 42 43 44 45 46 47 48 49 50

Created on 2021-06-17 by the reprex package (v2.0.0)

佞臣 2024-12-20 12:20:04

来自 Ramnath 的 Data.table Variablee,在字符串中指示所需的变量名称。

mydf <- data.table(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
tmydf <- setNames(data.table(t(mydf[,-"A"])), mydf[["A"]])

Data.table variante from Ramnath with indicating in string the variable name wanted.

mydf <- data.table(A = c(letters[1:10]), M1 = c(11:20), M2 = c(31:40), M3 = c(41:50))
tmydf <- setNames(data.table(t(mydf[,-"A"])), mydf[["A"]])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文