如果我想在数据框中使用一些变量求和dplyr,我可以这样做:
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> select(iris, starts_with('Petal')) %>% rowSums()
[1] 1.6 1.6 1.5 1.7 1.6 2.1 1.7 1.7 1.6 1.6 1.7 1.8 1.5 1.2 1.4 1.9 1.7 1.7 2.0 1.8 1.9 1.9 1.2 2.2 2.1 1.8 2.0 1.7 …Run Code Online (Sandbox Code Playgroud) 我在使用 rowwise() 计算每行中的 NA 数量时遇到问题。我的最小例子:
df <- data.frame(Q1 = c(rep(1, 1), rep(NA, 9)),
Q2 = c(rep(2, 2), rep(NA, 8)),
Q3 = c(rep(3, 3), rep(NA, 7))
)
df
Q1 Q2 Q3
1 1 2 3
2 NA 2 3
3 NA NA 3
4 NA NA NA
5 NA NA NA
6 NA NA NA
7 NA NA NA
8 NA NA NA
9 NA NA NA
10 NA NA NA
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列来计算每行中 NA 的数量。我可以通过写作来做到这一点
df$Count_NA <- rowSums(is.na(df))
df
Q1 Q2 Q3 …Run Code Online (Sandbox Code Playgroud) 我有这个 df:
df <- structure(list(a = 1:5, b = 6:10, c = 11:15, d = c("a", "b",
"c", "d", "e"), e = 1:5), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
a b c d e
<int> <int> <int> <chr> <int>
1 1 6 11 a 1
2 2 7 12 b 2
3 3 8 13 c 3
4 4 9 14 d 4
5 5 10 15 e 5
Run Code Online (Sandbox Code Playgroud)
rownames_to_column 作品:
df %>%
column_to_rownames(var="d") %>%
rownames_to_column(var= "d") …Run Code Online (Sandbox Code Playgroud) 我在 R 中有一个数据框。对于每一行,我想选择哪一列具有最高值,并粘贴该列的名称。当只有两列可供选择时,这很简单(请注意,如果两列的值都小于 0.1,我有一个不包括行的过滤步骤):
set.seed(6)
mat_simple <- matrix(rexp(200, rate=.1), ncol=2) %>%
as.data.frame()
head(mat_simple)
V1 V2
1 2.125366 6.7798683
2 1.832349 8.9610534
3 6.149668 15.7777370
4 3.532614 0.2355711
5 21.110703 1.2927119
6 2.871455 16.7370847
mat_simple <- mat_simple %>%
mutate(
class = case_when(
V1 < 0.1 & V2 < 0.1 ~ NA_character_,
V1 > V2 ~ "V1",
V2 > V1 ~ "V2"
)
)
head(mat_simple)
V1 V2 class
1 2.125366 6.7798683 V2
2 1.832349 8.9610534 V2
3 6.149668 15.7777370 V2
4 3.532614 …Run Code Online (Sandbox Code Playgroud) 我们如何在不指定列名的情况下使用dplyr ( tidyverse ) 为所有列获取第一个非缺失值 -合并- 行方式?
示例数据:
df <- data.frame(x = c(NA, "s3", NA, NA,"s4"),
y = c("s1", NA, "s6", "s7", "s4"),
z = c("s1", NA, NA, "s7", NA))
Run Code Online (Sandbox Code Playgroud)
我们可以使用do.call,但这看起来不太整洁:
df$xyz <- do.call(coalesce, df)
# x y z xyz
# 1 <NA> s1 s1 s1
# 2 s3 <NA> <NA> s3
# 3 <NA> s6 <NA> s6
# 4 <NA> s7 s7 s7
# 5 s4 s4 <NA> s4
Run Code Online (Sandbox Code Playgroud)
这可行,但我不想指定列:
df %>%
mutate(xyz = …Run Code Online (Sandbox Code Playgroud) 我有一个包含多个列的数据框,其中包含一个诊断的信息。条目是TRUE,FALSE或NA。我创建了一个向量,将这些列总结如下:如果患者在某个时间 ( TRUE) 被诊断出来,则TRUE,如果唯一有效的条目是FALSE,则FALSE,如果只是缺失,则NA。将文本写成代码:
data.frame(a= c(FALSE, TRUE, NA, FALSE, TRUE, NA, FALSE, TRUE, NA),
b= c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NA, NA, NA),
expected= c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, NA))
Run Code Online (Sandbox Code Playgroud)
我需要按行遍历所有列,并且使用split. 不幸的是,我的数据很大,需要很长时间。我现在所做的是
library(magrittr)
# big example data
df <- expand.grid(c(FALSE, TRUE, NA), c(FALSE, TRUE, NA)) %>%
.[rep(1:nrow(.), 50000), ] %>%
as.data.frame() %>%
setNames(., nm= c("a", "b"))
# My approach …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其中包含在时间点 0 到 2 测量的变量var。如下所示:
df <- data.frame(id= letters[1:5],
var0= c(1:3, NA, 5),
var1= c(11, NA, NA, 14:15),
var2= c(NA, NA, NA, NA, 25))
df
id var0 var1 var2
1 a 1 11 NA
2 b 2 NA NA
3 c 3 NA NA
4 d NA 14 NA
5 e 5 15 25
Run Code Online (Sandbox Code Playgroud)
对于每一行,即对于每个人,我想保留最新的非缺失值。所以期望的输出是:
id var0 var1 var2 last_val
1 a 1 11 NA 11
2 b 2 NA NA 2
3 c 3 NA NA 3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 tibble 中创建一个新列,该列收集并格式化所有其他列中找到的所有单词。如果可能的话,我想使用 dplyr 来做到这一点。原始数据框:
df <- read.table(text = " columnA columnB
1 A Z
2 B Y
3 C X
4 D W
5 E V
6 F U " )
Run Code Online (Sandbox Code Playgroud)
作为一个简化的例子,我希望做类似的事情:
df %>%
rowwise() %>%
mutate(newColumn = myFunc(.))
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
columnA columnB newColumn
1 A Z AZ
2 B Y BY
3 C X CX
4 D W DW
5 E V EV
6 F U FU
Run Code Online (Sandbox Code Playgroud)
当我在代码中尝试此操作时,输出如下所示:
columnA columnB newColumn
1 A Z ABCDEF
2 B Y ABCDEF …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,我想在其中转换一组列的值,条件是同一行中另一组列中的值。我想,未能做到这一点在tidyverse与组合rowwise和mutate_at。这是一个可重现的示例。
library(dplyr)
set.seed(20912)
dat <- data.frame(cat1 = sample(LETTERS[1:2], 10, replace = TRUE), cat2 = sample(LETTERS[1:2], 10, replace = TRUE), id = 3, sim_1 = rnorm(10), sim_2 = rnorm(10), stringsAsFactors = FALSE)
> dat
cat1 cat2 id sim_1 sim_2
1 A A 3 -0.1054062 -0.47563580
2 B A 3 -1.7198921 0.76713640
3 A B 3 -0.5946627 -0.33958464
4 B B 3 -1.6547488 -0.13026564
5 B B 3 -0.3779149 1.29590315
6 B B 3 0.6271939 0.08707965 …Run Code Online (Sandbox Code Playgroud) 假设我有以下 data.table:
dt <- data.table(a = 1:2, b = 1:2, c = c(1, 1))
# dt
# a b c
# 1: 1 1 1
# 2: 2 2 1
Run Code Online (Sandbox Code Playgroud)
创建第四列以d指示每行中预先存在的值都相同的最快方法是什么,以便生成的 data.table 将如下所示?
# dt
# a b c d
# 1: 1 1 1 identical
# 2: 2 2 1 not_identical
Run Code Online (Sandbox Code Playgroud)
我想避免使用duplicated函数并希望坚持使用identical或类似的函数,即使这意味着迭代每行中的项目。