小编Sot*_*tos的帖子

在R中使用dplyr包时出错

我使用下面的代码通过计算数据集unique_data中列x中的值并按降序排列计数值来提取关于列x的数据摘要.

unique_data %>%
group_by(x) %>%
arrange(desc(count(x)))
Run Code Online (Sandbox Code Playgroud)

但是,当我执行上面的代码时,我收到如下错误信息,

错误:没有适用于"group_by_"的方法应用于类"character"的对象

请告诉我,我的代码出了什么问题.对于您的信息,列x是字符数据类型.

此致,
莫汉

r dplyr

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

dplyr date as.numeric奇怪的行为

我刚注意到一个奇怪而有趣的错误:

as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30
Run Code Online (Sandbox Code Playgroud)

哪个是对的.但:

library(dplyr)
(Sys.Date()-30)-Sys.Date() %>% as.numeric()
#[1] "1969-12-02"
Run Code Online (Sandbox Code Playgroud)

如果%>%简单地将输出提供给第一个参数槽,那么这种行为肯定不正确吗?

r dplyr

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

在载体中提取第一个连续序列

我有一个矢量:

as <- c(1,2,3,4,5,9)
Run Code Online (Sandbox Code Playgroud)

我需要从索引1开始提取向量中的第一个连续序列,以便输出如下:

1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

这样做是否有智能功能,或者我必须做一些不那么优雅的事情:

a <- c(1,2,3,4,5,9)
is_continunous <- c()
for (i in 1:length(a)) {
  if(a[i+1] - a[i] == 1) {
    is_continunous <- c(is_continunous, i)
  } else {
    break
  }
}

continunous_numbers <- c()
if(is_continunous[1] == 1) {
  is_continunous <- c(is_continunous, length(is_continunous)+1)
  continunous_numbers <- a[is_continunous]
}
Run Code Online (Sandbox Code Playgroud)

它可以解决问题,但我希望有一个功能可以做到这一点.

indexing r continuous

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

在dplyr链中携带价值

假设我有以下专栏

**CurrentStatus**
Current
NoChange
NoChange
NoChange
NoChange
Late
Run Code Online (Sandbox Code Playgroud)

我想改变它,以便如果值为"NoChange",则使用先前值.

我试过了:

myDF %>% mutate(CurrentStatus = ifelse(CurrentStatus == "NoChange", lag(CurrentStatus), CurrentStatus)
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用 - 我认为这是因为它进行了矢量化计算,因此它同时查看所有滞后.我需要它"向前滚动".我想知道在没有for循环的情况下,最有效的方法是什么.我特别想避免使用for循环,因为有些分组变量没有显示我需要注意.

谢谢!

r dplyr

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

平均越来越多的数据帧列

我有一个包含7列的数据框(wc2):

    cm5      cm10      cm15      cm20      cm25      cm30       run_time
1 0.1221060 0.1221060 0.1221060 0.1221060 0.1221060 0.1221060        0
2 0.4084525 0.4028010 0.3617393 0.2595060 0.1294412 0.1220099        2
3 0.4087809 0.4042515 0.3711077 0.3119956 0.2241836 0.1290348        4
4 0.4088547 0.4045780 0.3732053 0.3218224 0.2611785 0.1720426        6
5 0.4088770 0.4046887 0.3739936 0.3255557 0.2739738 0.2081264        8
6 0.4088953 0.4047649 0.3744183 0.3273794 0.2798225 0.2273250       10
Run Code Online (Sandbox Code Playgroud)

对于每一行(run_time),我想首先平均第一列,然后是第一列和第二列,然后是第一列,第二列和第三列,依此类推,直到第6列.平均结果应该在新列或新数据框中(我不介意).我使用以下代码完成了它:

wc2$dia10 <- wc2$cm5
wc2$dia20 <- rowMeans(wc2[c("cm5", "cm10")])
wc2$dia30 <- rowMeans(wc2[c("cm5", "cm10", "cm15")])
wc2$dia40 <- rowMeans(wc2[c("cm5", "cm10", "cm15", "cm20")])
wc2$dia50 <- rowMeans(wc2[c("cm5", "cm10", "cm15", …
Run Code Online (Sandbox Code Playgroud)

r

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

如何删除具有特殊字符的行?

我想从我的数据框中删除包含左括号"("的行.

我尝试了以下方法:

df[!grepl("(", df$Name),] 
Run Code Online (Sandbox Code Playgroud)

但这并没有追查(标志

regex r dataframe grepl

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

如何group_by(everything())

我想使用数据框计算唯一的组合 dplyr

我尝试了以下方法:

require(dplyr)

set.seed(314)
dat <- data.frame(a = sample(1:3, 100, replace = T),
                  b = sample(1:2, 100, replace = T),
                  c = sample(1:2, 100, replace = T))

dat %>% group_by(a,b,c) %>% summarise(n = n())
Run Code Online (Sandbox Code Playgroud)

但为了使这个通用(与列的名称无关),我试过:

dat %>% group_by(everything()) %>% summarise(n = n())
Run Code Online (Sandbox Code Playgroud)

结果如下:

    a     b     c     n
<int> <int> <int> <int>
1      1     1     1     6
2      1     1     2     8
3      1     2     1    13
4      1     2     2     8
5      2     1     1     7
6      2     1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

在交替索引上拆分字符串

我有一个类似于"HLeelmloon"两个单词交织在一起的字符串.如何将它分成两个单独的单词,分开交替的字母?

我可以使用strsplit()和一个for循环来为两个新的向量分配交替的字母,然后加入列表,但这似乎很长的啰嗦:

string <- "HLeelmloon"
split<-el(strsplit(string,''))

> split
[1] "H" "L" "e" "e" "l" "m" "l" "o" "o" "n"

word1<-c()
word2<-c()
for(i in 1:length(split)){
  if(i %% 2 == 1){
    word1<-append(word1, split[i])
  } else {
    word2<-append(word2, split[i])
  }
}

word1 = paste0(word1, collapse = '')
word2 = paste0(word2, collapse = '')

> word1
[1] "Hello"
> word2
[1] "Lemon"
Run Code Online (Sandbox Code Playgroud)

我的问题是它不是很优雅,如果我想将字符串分成N个不同的单词,它就不会很好.有一个更好的方法吗?

string split r

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

如何从字符串末尾每n个字符插入一个字符

我想从字符串末尾开始每五个字符插入一个冒号,最好在R中使用regex和gsub。

text <- "My Very Enthusiastic Mother Just Served Us Noodles!"
Run Code Online (Sandbox Code Playgroud)

我已经能够使用以下命令从文本开头每隔五个字符插入一个冒号:

gsub('(.{5})', "\\1:", text, perl = T)
Run Code Online (Sandbox Code Playgroud)

我为实现这一目的编写了一个优雅的函数,如下所示:

library(dplyr)
str_reverse<-function(x){
  strsplit(x,split='')[[1]] %>% rev() %>% paste(collapse = "") 
}

text2<-str_reverse(text)
text3<-gsub('(.{5})', "\\1:", text2, perl = T)
str_reverse(text3)
Run Code Online (Sandbox Code Playgroud)

得到期望的结果

[1]“ M:y Ver:y Ent:husia:stic:Mothe:r Jus:t Ser:ved U:s Noo:dles!”

有没有办法可以使用正则表达式直接实现?

regex r

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

如果通过 dplyr 和 stringr 进行字符串,有没有办法将一组字符串替换为另一组字符串

我重现了我的问题的简单版本。我本质上想将所有语句的语句列中的英语单词替换为西班牙语等效单词。

library(tidyverse)
english <- c('hello','world','my','name', 'is')
spanish <- c('hola','mundo','mi','nombre', 'es')
statement <-c('Hello my name is john doe',' hello world','my name is world','hello john, my world is','jane is my world ')

df <- data.frame(english,spanish,statement)  
df
Run Code Online (Sandbox Code Playgroud)

我试过

df %>% 
  str_replace_all(statement, c(df$english), c(df$spanish))
Run Code Online (Sandbox Code Playgroud)

str_replace_all(statement, c(df$english), c(df$spanish)).
Run Code Online (Sandbox Code Playgroud)

第二次尝试让我更接近我的答案。仅替换了一个答案。

r stringr dplyr tidyverse

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

标签 统计

r ×10

dplyr ×5

regex ×2

continuous ×1

dataframe ×1

grepl ×1

indexing ×1

split ×1

string ×1

stringr ×1

tidyverse ×1