相关疑难解决方法(0)

将数据框架从宽格式转换为长格式

将我data.frame从宽表转换为长表时遇到一些麻烦.目前它看起来像这样:

Code Country        1950    1951    1952    1953    1954
AFG  Afghanistan    20,249  21,352  22,532  23,557  24,555
ALB  Albania        8,097   8,986   10,058  11,123  12,246
Run Code Online (Sandbox Code Playgroud)

现在我想把它data.frame变成一个长期的data.frame.像这样的东西:

Code Country        Year    Value
AFG  Afghanistan    1950    20,249
AFG  Afghanistan    1951    21,352
AFG  Afghanistan    1952    22,532
AFG  Afghanistan    1953    23,557
AFG  Afghanistan    1954    24,555
ALB  Albania        1950    8,097
ALB  Albania        1951    8,986
ALB  Albania        1952    10,058
ALB  Albania        1953    11,123
ALB  Albania        1954    12,246
Run Code Online (Sandbox Code Playgroud)

我已经看过并尝试了它melt()reshape()功能,因为有些人提出了类似的问题.但是,到目前为止我只得到凌乱的结果.

如果有可能我想用这个reshape() …

r reshape dataframe r-faq

142
推荐指数
7
解决办法
9万
查看次数

按列中的值过滤数据框

我正在使用数据集LearnBayes.对于那些想要查看实际数据的人:

install.packages('LearnBayes')
Run Code Online (Sandbox Code Playgroud)

我试图根据列中的值过滤掉行.例如,如果列值是"water",那么我想要那一行.如果列值是"牛奶",那么我不想要它.最终,我试图过滤掉所有饮用色谱柱都是"水"的人.

r filter dataframe

92
推荐指数
3
解决办法
38万
查看次数

如何使用 dplyr across 过滤多列中的 NA

我正在尝试过滤掉多列中具有 NA 值的行。仅当所有感兴趣的列均为 NA 时才应删除行。

场景与这个问题相同(但我没有足够的声誉来发表评论):filtering dataframe based on NA on multiple columns

解决方案之一是使用:

library(dplyr)
df_non_na <- df %>% filter_at(vars(type,company),all_vars(!is.na(.)))
Run Code Online (Sandbox Code Playgroud)

由于“filter_at”在 dplyr 中被贬值,我如何使用“filter”和“across”来实现类似的结果?

r dplyr

7
推荐指数
1
解决办法
7758
查看次数

在“dplyr”中一次按多列进行过滤

这是一些示例数据

library(tidyverse)

data <- matrix(runif(20), ncol = 4) 
colnames(data) <- c("mt100", "cp001", "cp002", "cp003")
data <- as_tibble(data)
Run Code Online (Sandbox Code Playgroud)

真实的数据集有更多的列,但实际上有很多列都以“cp”开头。我dplyr可以选择所有这些列

data %>%
  select(starts_with("cp"))
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用starts_with(或类似的函数)按多列进行过滤,而不必显式地全部写入?我在想这样的事情

data %>%
  filter(starts_with("cp") > 0.2)
Run Code Online (Sandbox Code Playgroud)

谢谢!

r dplyr

6
推荐指数
2
解决办法
8025
查看次数

使用 dplyr R 中的 last_col() 函数过滤数据框

我有多个看起来像这样的数据框

time <- c(1,1,1,1,2,2,2,2,3,3,3,3)
ID <- c(1,2,3,4,1,2,3,4,1,2,3,4)
value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5,0.20,0.40,0.50,0.60)

test <- data.frame(time, ID, value)
test

  time ID value
1     1  1  0.00
2     1  2  0.10
3     1  3  0.20
4     1  4  0.40
5     2  1  0.00
6     2  2  0.05
7     2  3  0.05
8     2  4  0.50
9     3  1  0.20
10    3  2  0.40
11    3  3  0.50
12    3  4  0.6
Run Code Online (Sandbox Code Playgroud)

我希望能够根据最后一列中小于 0.05 的值过滤数据框。我知道我可以在 baseR 中轻松使用test[,ncol(test)] <0.05 有没有一种方法可以将其合并到 dplyr 管道中或使用 last_col() 函数,例如:test …

r dplyr tidyr tidyverse

3
推荐指数
1
解决办法
135
查看次数

dplyr管道数据-`.`和`.x`之间的差异

df1 <- data.frame(
  " " = c(" ", "Part Number 1", "Part Number 2", "Part Number 3"), 
  Julie = c("Measurement 1", 33, 34, 33),
  Julie = c("Measurement 2", 32, 31, 31),
  Joe = c("Measurement 1", 33, 33, 30),
  Joe = c("Measurement 2", 31, 32, 31))

df1 %>%
  mutate_all(as.character) %>% 
  set_names(c("Part", paste(names(.)[2:ncol(.)], .[1, 2:ncol(.)], sep = "-"))) %>%
  `[`(2:nrow(.), ) %>%
  gather("key", "value", contains("Measurement")) %>%
  separate("key", c("person", "measurement"), sep = "-") %>%
  mutate_at("person", ~ stringr::str_replace(.x, "\\..*",""))   # line 14
  # mutate_at("person", …
Run Code Online (Sandbox Code Playgroud)

r dplyr

1
推荐指数
1
解决办法
64
查看次数

标签 统计

r ×6

dplyr ×4

dataframe ×2

filter ×1

r-faq ×1

reshape ×1

tidyr ×1

tidyverse ×1