将 tibble 转换为带有列标题的数据框

Posted

技术标签:

【中文标题】将 tibble 转换为带有列标题的数据框【英文标题】:Transform tibble to data frame with column headers 【发布时间】:2018-11-26 22:55:21 【问题描述】:

我从 Excel 表中导入数据,如下所示:

F4_Off <- readxl::read_xlsx("myExcel.xlsx", sheet = "Offline", col_names = TRUE, range = "I1:L285")
F4_Off

F4_On <- readxl::read_xlsx("myExcel.xlsx", sheet = "Online", col_names = TRUE, range = "J1:M68")
F4_On

结合使用:

F4_Gesamt <- rbind(F4_Off, F4_On)

数据看起来像这样:

A tibble: 351 x 4
    nein Smartphone `Computer / Laptop / Tablet` `keine Angabe`
   <dbl>      <dbl>                        <dbl>          <dbl>
 1   NA         NA                            1.             NA
 2   NA          1.                          NA              NA
 3   NA          1.                          NA              NA
 4   NA          1.                          NA              NA
 5   NA          1.                           1.             NA
 6   NA          1.                           1.             NA
 7   NA          1.                           1.             NA
 8   NA          1.                          NA              NA
 9   NA         NA                            1.             NA
10    1.        NA                           NA              NA

实际上我希望对每个列进行总结(总结,计算“1”)并转换成这样的表格:

    Type                                    Value
    <chr>                                   <dbl>
1   nein                                    162
2   Smartphone                              120
3   `Computer / Laptop / Tablet`            93
4   `keine Angabe`                          16

我可以通过这样做来实现总结:

F4_Gesamt_sum <- colSums(F4_Gesamt, na.rm = TRUE, dims = 1)

然后它看起来像这样:

                   nein                 Smartphone Computer / Laptop / Tablet               keine Angabe 
                    162                        120                         93                         16 

现在:

str(F4_Gesamt_sum)

给出:

Named num [1:4] 162 120 93 16
 - attr(*, "names")= chr [1:4] "nein" "Smartphone" "Computer / Laptop / Tablet" "keine Angabe"

这就是我这几天惨遭失败的地方,我如何让它看起来像是我在上面“伪造”的?

最后我想将这些数据提供给 ggplot 并制作一个漂亮的条形图。

【问题讨论】:

F4_Gesamt %&gt;% gather(Type, Value) %&gt;% group_by(Type) %&gt;% summarise(Value = sum(Value, na.rm = TRUE)) 也许? @markus 谢谢,这行得通 @markus,对不起,如果我做错了,我是 *** 的新手,我将如何向 F4_Off 添加一列“age”(我知道 cbind ...)然后得到结果具有 3 列“年龄”、“类型”和“值”的集合,其中的计数按“年龄”和“类型”分组?(请让我知道这是否应该是它自己的问题,然后我将创建一个新的) 您可以通过多种方式添加列。使用来自dplyrF4_Off$age &lt;- ...mutate 或来自tibble 包的add_column(如果您更喜欢tidyverse 解决方案)。我想这取决于age 的来源。你最好用一个最小的、可重复的例子来问一个新问题。 ps 使用dput() 分享您的数据。问候 @markus,谢谢 【参考方案1】:

试试

as.data.frame(F4_Gesamt_sum)

(function(x)data.frame(Type=names(x), Value=x))(F4_gesamt_sum)

【讨论】:

as.data.frame(F4_Gesamt_sum) 也可以,另一个以某种方式复制了“类型”谢谢! 对,“类型”列显示为行名以及第二个版本中的第一个变量

以上是关于将 tibble 转换为带有列标题的数据框的主要内容,如果未能解决你的问题,请参考以下文章

将带有 json 字符串的数据框列转换为不同的列

将数据框行转换为列名

将带有 JSON 对象数组的 Spark 数据框列转换为多行

将字符 lat/lng 值转换为数字

将 NumPy 数组转换为带有列的 Pandas 数据框

将 NumPy 数组转换为带有列的 Pandas 数据框