我有一个数据框,可以过滤,删除和添加一些列,然后我想使用管道(%>%)重命名所有列。
但是,我不明白如何获取当前的colnames向量(在内%>%)并将其替换为另一个向量?如果我不删除列,这似乎很简单,但是如何“更新” colnames管道链中的向量?
library(dplyr)
library(tidyr)
data("mtcars")
mtcars %>%
filter(disp < 200) %>%
dplyr::select(-c('mpg','cyl', "disp")) %>%
mutate(Type = 2) %>%
# rename_at(vars(names(df), # how to rename the columns???
# function(x) paste(names(df), "new", sep = "_"))) %>%
head(2)
Run Code Online (Sandbox Code Playgroud)
我得到的是:
hp drat wt qsec vs am gear carb Type
1 110 3.9 2.620 16.46 0 1 4 4 2
2 110 3.9 2.875 17.02 0 1 4 4 2
Run Code Online (Sandbox Code Playgroud)
我期望什么(更改姓氏)
hp_new drat_new wt_new qsec_new vs_new am_new gear_new carb_new …Run Code Online (Sandbox Code Playgroud) 我想在 my 中创建新列dat,由满足条件的值填充。所以,我想保留valuewhere whereregime == "SA"并在 new column 中的整个组中填充此值vals.sa。
这结合了filterand mutate,但我不确定它们的正确组合是什么?Filter只是保持行满足条件,但如何在组中的所有行上扩展此值?
我的数据:
dat <- data.frame(id = c(1,1,2,2,2,2,3,3),
regime = c("SA", "B", "SA", "B", "C", "F", "SA", "D"),
value = c(3,5,1,2,5,6,7,8))
Run Code Online (Sandbox Code Playgroud)
使用处理数据 dplyr
dat %>%
# group data by id
group_by(id) %>%
# how to write this condition and get values instead or TRUE/FALSE?
mutate(val.sa = regime == "SA")
Run Code Online (Sandbox Code Playgroud)
与填充val.sa值对应的预期输出regime == "SA"
id regime value …Run Code Online (Sandbox Code Playgroud) 我有一些原始值,我需要在几个阈值和计算之后将其重新编码为 0-1。这是公式的样子:

我认为这只是说:
这是我的方法:
# V is from 0-600 m3/ha
set.seed(3)
V_pine = sample.int(100, 10) # generate 10 random numbers up to 100
> V_pine
[1] 5 58 12 36 99 95 8 20 74 55
# Recode values following multiple ifelse statements
for (i in V_pine){
if (i <= 60) { …Run Code Online (Sandbox Code Playgroud) 我正在努力计算数据中独特组合的数量。我想首先将它们分组,id然后计算每个值的组合出现的次数。d-f在这里,元素是否组合在 '或 中并不重要f-d,它们仍然属于同一类别,因为它们具有相同的元素:
combinations:
n
c-f: 2 # aslo f-c
c-d-f: 1 # also cfd or fdc
d-f: 2 # also f-d or d-f. The dash is only for isualization purposes
Run Code Online (Sandbox Code Playgroud)
虚拟示例:
# my data
dd <- data.frame(id = c(1,1,2,2,2,3,3,4, 4, 5,5),
cat = c('c','f','c','d','f','c','f', 'd', 'f', 'f', 'd'))
> dd
id cat
1 1 c
2 1 f
3 2 c
4 2 d
5 2 f
6 3 c
7 3 f …Run Code Online (Sandbox Code Playgroud) 我想%>%在dplyr包装中使用管道变得更好.我理解使用pipes(%>%)的全部意义在于它用管道连接的那个替换了函数中的第一个参数.也就是说,在这个例子中:
area = rep(c(3:7), 5) + rnorm(5)
Run Code Online (Sandbox Code Playgroud)
管道
area %>%
mean
Run Code Online (Sandbox Code Playgroud)
相等的正常功能
`mean(area)`.
Run Code Online (Sandbox Code Playgroud)
我的问题是它何时到达数据帧.我想在数据帧列表中拆分数据帧,而不是计算每area列的平均值.但是,我无法弄清楚如何调用列而不是数据帧?
我知道我可以逐年获得手段,aggregate(area~ year, df, mean)但我想练习管道.
谢谢!
# Dummy data
set.seed(13)
df<-data.frame(year = rep(c(1:5), each = 5),
area = rep(c(3:7), each = 5) + rnorm(1))
# Calculate means.
# Neither `mean(df$area)`, `mean("area")` or `mean[area]` does not work. How to call the column correctly?
df %>%
split(df$year) %>%
mean
Run Code Online (Sandbox Code Playgroud) 简单的问题,但我找不到答案。
我有一个向量
a<-c(5,6,7)
Run Code Online (Sandbox Code Playgroud)
如何取回向量中所有元素的索引?
我需要回来
1 #"a"
2 #"b"
3 #"c"
Run Code Online (Sandbox Code Playgroud)
或者 c(1,2,3)
如果我运行seq_along(A),它给了我回来(1,1,1)不是(1,2,3):
for (i in seq_along(a)) {
print(seq_along(a[[i]]))
}
[1] 1
[1] 1
[1] 1
Run Code Online (Sandbox Code Playgroud)
这样做的原因是我需要为我的每个图创建一个唯一的名称。我有大约 100 个图解说明 100 个位置。位置名称太长并且包含特殊字符,因此我无法使用它们来命名我的输出图。我想使用索引值来替换每个保存的图的名称。
我需要修改的功能:
lineCumRateGraph <- function(tab, na.rm = TRUE, ...) {
# Create list of locations
type_list <-unique(tab$uniqueLoc)
# Create a for loop to produce ggplot plots
for (i in seq_along(type_list)) {
# create a plot for each loc in df
plot<-
ggplot(subset(tab, tab$uniqueLoc == type_list[i]), …Run Code Online (Sandbox Code Playgroud)