小编may*_*cca的帖子

在链接管道中删除某些数据框列后,重命名所有数据框列

我有一个数据框,可以过滤,删除和添加一些列,然后我想使用管道(%>%)重命名所有列。

但是,我不明白如何获取当前的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)

r dplyr

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

R按组过滤值填充新列

我想在 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)

expand r filter dplyr

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

R:通过多个规则替换列/向量值的智能方法?

我有一些原始值,我需要在几个阈值和计算之后将其重新编码为 0-1。这是公式的样子: 在此处输入图片说明

我认为这只是说:

  • 如果 x < 60 -> x = 0
  • 如果 x > 60 & <= 80 -> x = 0.05*x -3
  • 如果 x > 80 -> x = 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)

r function dplyr

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

按组计算组合数

我正在努力计算数据中独特组合的数量。我想首先将它们分组,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)

r dplyr tidyr

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

R:使用dplyr中的管道%>%计算数据框列表中的列的平均值

我想%>%在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)

r dplyr

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

R:获取向量中所有元素的索引?

简单的问题,但我找不到答案。

我有一个向量

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)

indexing r

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

标签 统计

r ×6

dplyr ×5

expand ×1

filter ×1

function ×1

indexing ×1

tidyr ×1