小编Ste*_*pré的帖子

从dplyr排序月份chronologicaly与arrange()

我有一个月份(数字)列表,我转换为名称:

fd <- df %>%
  select(product, sales, month) %>%
  mutate(month = month.name[month]) %>%
  filter(!is.na(product), sales!=0) %>%
  group_by(month) %>%
  summarise(sales = sum(sales)) %>%
  collect()
Run Code Online (Sandbox Code Playgroud)

我想对表格进行排序,以便按时间顺序列出月份.我正在寻找一个解决方案与arrange()来自dplyr如果可能的话.

结果如下fd:

       month   sales
1      April 1306629
2     August 1317986
3   December 1263070
4   February 1493914
5    January 1316889
6       July 1323161
7       June 1331614
8      March 1439019
9        May 1369881
10  November 1256950
11   October 1317647
12 September 1229632
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

根据字典中单词的值检索句子分数

编辑 dfdict

我有一个包含句子的数据框:

df <- data_frame(text = c("I love pandas", "I hate monkeys", "pandas pandas pandas", "monkeys monkeys"))
Run Code Online (Sandbox Code Playgroud)

还有一个包含单词及其对应分数的字典:

dict <- data_frame(word = c("love", "hate", "pandas", "monkeys"),
                   score = c(1,-1,1,-1))
Run Code Online (Sandbox Code Playgroud)

我想在其中添加一个"得分"列df,将每个句子的得分相加:

预期成绩

                  text score
1        I love pandas     2
2       I hate monkeys    -2
3 pandas pandas pandas     3
4      monkeys monkeys    -2
Run Code Online (Sandbox Code Playgroud)

更新

以下是迄今为止的结果:

Akrun的方法

建议1

df %>% mutate(score = sapply(strsplit(text, ' '), function(x) with(dict, sum(score[word %in% x]))))
Run Code Online (Sandbox Code Playgroud)

请注意,要使此方法起作用,我必须使用data_frame()创建df,dict而不是 …

r lapply sapply dplyr stringi

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

项目欧拉#22,关闭158,055

我目前正在解决Project Euler问题22,该问题有以下挑战:

使用names.txt(右键单击和"保存链接/目标为..."),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序.然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数.

例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称.因此,COLIN将获得938×53 = 49714的分数.

文件中所有名称分数的总和是多少?

可以使用上面的链接下载该文件.我写了下面的代码来解决这个问题:

rm(list=ls())
library(splitstackshape)

#read in data from http://projecteuler.net/problem=22
names=sort(t(read.table("names.txt",sep=",")))

#letters to numbers conversion vectors
from=LETTERS[seq(1,26)]
to=as.character(seq(1,26))

#function to replace all letters with corresponding numbers
gsub2 = function(pattern, replacement, x, ...){
  for(i in 1:length(pattern))
    x = gsub(pattern[i],paste(replacement[i]," ",sep=""), x, ...)
  x
}

#create df, run function, create row number var for later calculation
df=data.frame(names=names)
df$name.num = gsub2(from,to,df$names)
df$rownum=seq(1,nrow(df))

#split letter …
Run Code Online (Sandbox Code Playgroud)

r splitstackshape

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

在数据框中更有效地使用临时列(即时创建)

考虑以下数据框:

df <- data.frame(replicate(5,sample(1:10, 10, rep=TRUE)))

如果我想将每一行除以其总和(以进行概率分布),我需要执行以下操作:

df %>% mutate(rs = rowSums(.)) %>% mutate_each(funs(. / rs), -rs) %>% select(-rs)

真的感觉效率低下:

  1. 创建rs
  2. 将每个值除以相应的行 rowSums()
  3. 删除临时创建的列以清理原始数据框。

使用现有列时,感觉更自然:

df %>% summarise_each(funs(weighted.mean(., X1)), -X1)

使用dplyr,是否有更好的方法来处理临时列(即时创建)而不是在处理后添加和删除它们?

我也对如何data.table处理这样的任务感兴趣。

r dplyr data.table

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

如何将每一行作为参数传递给Tableau计算字段中的R脚本

我正在尝试对我拥有的桌子进行情绪分析.

我希望每行字符串数据都传递给R脚本,但问题是Tableau只接受汇总数据作为参数:

SCRIPT_STR(
  'output <- .arg1; output', [comments]
)
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误信息:

# All fields must be aggregate or constant.
Run Code Online (Sandbox Code Playgroud)

r sentiment-analysis tableau-api

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

查找行方式最小值和返回值及其对应的列名称

考虑以下矩阵m:

    ca bsa rd zaa
ada  3   4  3   2
aca  1   4  5   2
ara  3   4  3   2
ava  3   4  5   2
Run Code Online (Sandbox Code Playgroud)

我试图为每一行找到最小值并以下列形式返回data.frame:

    q   s d
1 ada zaa 2
2 aca  ca 1
3 ara zaa 2
4 ava zaa 2
Run Code Online (Sandbox Code Playgroud)

现在我正在做:

res <- t(sapply(seq(nrow(m)), function(i) {
  j <- which.min(m[i,])
  c(q = rownames(m)[i],
    s = colnames(m)[j],
    d = m[i,j])}))

res <- data.frame(res)
res$d <- as.numeric(res$d)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更好的方法来构建它.

构建res使用c()(将所有组件强制转换为相同类型)然后将其转换为data.frame并最终更改d为数字以获得以下结构感觉效率相当低:

'data.frame': …
Run Code Online (Sandbox Code Playgroud)

r

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

R中不同组的时间序列多重图

我有一个包含多个变量(大约50个)的大型数据框,第一列为as date,第二列为id

我的数据大致如下所示:

df <- data.frame(date = c("01-04-2001 00:00","01-04-2001 00:00","01-04-2001 00:00",
                      "01-05-2001 00:00","01-05-2001 00:00","01-05-2001 00:00",
                      "01-06-2001 00:00","01-06-2001 00:00","01-06-2001 00:00",
                      "01-07-2001 00:00","01-07-2001 00:00","01-07-2001 00:00"), 
             id = c(1,2,3,1,2,3,1,2,3,1,2,3), a = c(1,2,3,4,5,6,7,8,9,10,11,12), 
             b = c(2,2.5,3,3.2,4,4.6,5,5.6,8,8.9,10,10.6))
Run Code Online (Sandbox Code Playgroud)

我想要所有三个id的时间序列图分别在同一变量图中ab在不同图中。

我试过了,ggplot 但是没有用。请帮我

plot r ggplot2

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

R - 计数行数@符号

我有一个带ID的记录列表(其中一些是用户名,其中一些是电子邮件地址).我想知道有多少是电子邮件地址.我想一个简单的方法是计算有多少行包含@符号,但是我无法获得一个函数来完成这项工作.任何帮助表示赞赏!

样本数据集:

x <- c("1234@aol.com", "johnnyApple", "tomb@gmail.com")
Run Code Online (Sandbox Code Playgroud)

regex r

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

在R中的面板数据中创建指示符变量

我觉得这应该很容易,但不知所措,并希望你们都能提供帮助.我有面板数据,通过id变量,这里只是v1:

id  v1
A   14
A   15
B   12
B   13
B   14 
C   11
C   12 
C   13
D   14
Run Code Online (Sandbox Code Playgroud)

我只想创建一个虚拟变量,指示面板中是否存在v1(例如12)的值id.所以类似于:

id  v1  v2
A   14  0
A   15  0 
B   12  1
B   13  1
B   14  1 
C   11  1
C   12  1 
C   13  1
D   14  0
Run Code Online (Sandbox Code Playgroud)

我觉得这应该很简单,但无法弄清楚一个简单的一线解决方案.

非常感谢!

r panel

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

python pandas中的等效R"findcorrelation(corr,cutoff = 0.75)"

我有dataFrame名为"data".我计算了数据的相关性:

corr = data.corr()
Run Code Online (Sandbox Code Playgroud)

我想从"data"文件中删除相关性大于0.75的列.使用以下命令可以非常轻松地在R中完成此操作:

hc=findCorrelation(corr,cutoff = 0.75)
data <- data[,-c(hc)]
Run Code Online (Sandbox Code Playgroud)

我在python中寻找类似的命令.在熊猫或scikit-learn中是否有任何可以执行类似工作的命令?

python numpy r pandas scikit-learn

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