我正在使用一个由 Google 表单构建的小型数据集。列名称是完整的调查问题,例如。
“1.哪个团队最能描述您的工作?”
“2.你是经理吗?”
“3.你和x在一起多久了?”
我想将所有这些列重命名为“1”、“2”、“3”等。我知道我可以执行以下操作,但我希望有一种更优雅/更快的方法。像这样的柱子有23根。
survey %>% rename_with(
`1` = `1. What team most describes your work?`,
`2` = `2. Are you a manager?`...
Run Code Online (Sandbox Code Playgroud)
这可行,但编写速度很慢。tidyverse 有谁有更好的吗?我对 R 和编码总体来说是新手,所以任何建议都值得赞赏。
给出的数据是虚构的,实际上它们更复杂
t <- data.frame(v1=c(265, -268, 123, 58, 560, 56, -260, 40, 530, -895, 20))
Run Code Online (Sandbox Code Playgroud)
我想计算具有两个限制值的累积和:0和500。如果累积总数超过500,则必须保留500。如果累积总数变为负数,则必须存储0。得到的结果如下:
v1 sum.c
1 265 265
2 -268 0
3 123 123
4 58 181
5 560 500
6 56 500
7 -260 240
8 40 280
9 530 500
10 -895 0
11 20 20
Run Code Online (Sandbox Code Playgroud)
Excel中的公式如下:=if(B1+A2<0; 0; if(B1+A2>500; 500; B1+A2))
有任何想法吗?
我想使用/改变obs我在 data.table 中创建的列,但返回错误
Error in eval(jsub, SDenv, parent.frame()) : object 'obs' not found
请参阅示例数据的实现。
library(data.table)
set.seed(0)
dt <- data.table(
index = sample(0:100, 10, replace=FALSE),
value = 1:100)
dt[, `:=`(obs = seq_along(index)-1, window = floor(obs/10))] #create an index of every observation and bin them
Run Code Online (Sandbox Code Playgroud) 我有一个数据集,其中每年都有一些基于特定年份的列中的数据。
result_birth <- tibble::tibble( "1970" =c(8.816455, 21.41139,39.0443,51.639236, 59.196197, 100.759485, 76.829107,103.278472,79.348094,99.499991, 81.867081, 78.088601),
"1971"= c(18.878066 ,30.204906 ,42.790284 ,65.443964 ,69.219577 ,80.546417 ,114.526936 ,94.390332 ,108.234248 ,83.063492 ,103.200096 ,72.99519 ),
"1972"= c(8.801375 ,22.632107 ,36.462839 ,56.580268 ,69.153661 ,76.697696 ,80.469714 ,109.388518 ,96.815125 ,108.131179 ,69.153661 ,91.785768 ),
"1973"= c(14.675905 ,20.790865 ,31.797794 ,64.818581 ,58.70362 ,86.832438 ,85.609446 ,96.616375 ,97.839367 ,78.271493 ,105.177319 ,53.811652 ))
Run Code Online (Sandbox Code Playgroud)
我想要从数据框的底部获取两两数据的平均值。最后的 rwos 必须与原始数据集相同。例如,对于第一行,我们将有这样的内容:
我写了一些代码来做到这一点,但是这段代码有两个问题:首先,它从上面开始;因此,第一行必须与旧数据相同,(我想要相反,最后一行与旧数据相同)。其次,这些代码非常繁琐,我需要一些更加用户友好的东西。
nrows <- nrow(result_birth)
total_birth <- data.frame(matrix(NA, nrow = nrows, ncol =
ncol(result_birth)))
for (i in 1:ncol(result_birth)) {
for (j in 2:nrows) { …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) 我正在处理NDVI Time-Series一年内有 23 个观察值的数据。我能够检测到 14 - 19 次观察之间出现的峰值。现在我想找到山顶的起点和终点。我可以通过使用“diff()”查找符号变化来找到峰值的开始和结束。但在某些情况下,我注意到能够找到终点,因为高峰期的终点是在明年。解决方案是在 23 次观察后重复这些值,使其循环并找到终点。
下面给出的例子将详细说明问题
x = c(250.7943,292.2904,340.459,368.811,363.4534,330.2302,291.6527,275.2815,299.9305,367.0331,461.2618,559.0772,639.6197,691.723,713.9833,709.5409,680.4415,626.1153,547.0395,450.4623,353.0839,277.257,241.597)
Run Code Online (Sandbox Code Playgroud)
我正在寻找从峰值到两个方向的符号变化,并且能够在 8 个观察点找到峰值的起点,但是当我寻找从峰值开始的终点时,我直到 23 号才发现任何变化。在这种情况下,我应该在 23 处得到峰值。如表所示,我已在 Excel 中手动重复这些值以获得符号更改。
在 R 中如何做到这一点???
一种解决方案可能是设置一个条件来检查是否在第 23 个观察之前未发现符号变化,然后将所有 23 个值填充到向量的末尾,然后查找符号变化。
有没有一种简单的方法可以实现这一点???
我有一个这样的情节,由以下内容组成:
plot = ggplot(dat, aes(x=Nest)) + geom_bar(aes(fill=MotherID), position = position_stack(reverse = TRUE)) + facet_wrap(~Year) + scale_fill_grey(start = 0, end = .9) + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + theme(legend.position="none") + ylab("Number of offpsring")
Run Code Online (Sandbox Code Playgroud)
我希望所有的条形都彼此相邻,并且在 x 轴上的 3、4、9 处没有间隙。我想这是因为 Nest 是一个数字而不是一个字符串。
我有dat$nest = as.factor(dat$nest)
我有一列数据框df$c_touch:
c_touch
0
1
3
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
其中每个数字指的是一段时间,使得0 = 2 mins, 1 = 5 mins, 2 = 10 mins, 3=15 mins, 4=20 mins, 5=30 mins.
我想添加另一列,df$c_duration就像
c_touch c_duration
0 2
1 5
3 15
2 10
3 15
4 20
5 30
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在使用循环,这有点丑陋/混乱,我宁愿不使用它。是否有一种无循环的方法来添加额外的列,特别是使用 dplyr mutate 函数(因为我正在尝试使用 dplyr 重写所有代码)?
我正在尝试创建一个简单的等高线图。
下面附有示例代码。输出是一个带有标签和警告消息的空图 -
1: stat_contour(): Zero contours were generated
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决它吗?
library(tidyverse)
# x and y are generated from uniform random distribution
x <- runif(1000, min = -5, max = 5)
y <- runif(1000, min = -5, max = 5)
z <- x^2 + y^2
tbl <- tibble(x, y, z)
ggplot(data = tbl,
aes(x = x,
y = y, …Run Code Online (Sandbox Code Playgroud) 我发现这across()对于在多个列上重复操作非常有用。但是,我仍然没有完全理解如何选择特定列进行操作。
假设我想将函数应用于mtcars、和之外 的所有列。gearcarb
我尝试过类似的东西
# Function to use over columns
demean <- function(x) {
x - mean(x, na.rm = TRUE)
}
# Use function on all but columns gear and carb
mtcars %>% mutate(across(.cols = select(.,-gear,-carb), demean))
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误
Error: Problem with `mutate()` input `..1`.
x Must subset columns with a valid subscript vector.
x Subscript has the wrong type `data.frame<
Run Code Online (Sandbox Code Playgroud)
取消选择某些列的正确方法是什么across?
r ×10
dplyr ×6
ggplot2 ×2
across ×1
data.table ×1
loops ×1
rename ×1
rowwise ×1
time-series ×1