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

16

我有一份从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 %>% gather(Type, Value) %>% group_by(Type) %>% summarise(Value = sum(Value, na.rm = TRUE)) 这样写可以吗? - markus
@markus 谢谢,这个有效。 - xBarns
@markus,如果我做错了,请原谅,我是stackoverflow的新手,如何在F4_Off中添加一列“年龄”(我知道cbind...),然后得到一个有3列“年龄”,“类型”和“值”的结果集,其中“值”的计数按“年龄”和“类型”分组?(如果这应该是一个单独的问题,请告诉我,我会创建一个新的问题) - xBarns
你可以用多种方式添加一列。使用 F4_Off$age <- ...dplyr 中的 mutatetibble 包中的 add_column(如果你更喜欢 tidyverse 解决方案)。我猜这取决于 age 来自哪里。你最好提出一个具有最小可重现性的示例来询问。附言:使用 dput() 共享你的数据。祝好! - markus
@markus,谢谢。 - xBarns
1个回答

29
尝试
as.data.frame(F4_Gesamt_sum)
或者
(function(x)data.frame(Type=names(x), Value=x))(F4_gesamt_sum)

1
as.data.frame(F4_Gesamt_sum) 也可以工作,另一个会在“Type”上产生重复。谢谢! - xBarns
1
"Type"列出现为行名称,并且在第二个版本中也是第一个变量。 - lebatsnok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接