我有一个月份(数字)列表,我转换为名称:
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) 编辑 df
和dict
我有一个包含句子的数据框:
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
而不是 …
我目前正在解决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) 考虑以下数据框:
df <- data.frame(replicate(5,sample(1:10, 10, rep=TRUE)))
如果我想将每一行除以其总和(以进行概率分布),我需要执行以下操作:
df %>% mutate(rs = rowSums(.)) %>% mutate_each(funs(. / rs), -rs) %>% select(-rs)
这真的感觉效率低下:
rs
列rowSums()
使用现有列时,感觉更自然:
df %>% summarise_each(funs(weighted.mean(., X1)), -X1)
使用dplyr
,是否有更好的方法来处理临时列(即时创建)而不是在处理后添加和删除它们?
我也对如何data.table
处理这样的任务感兴趣。
我正在尝试对我拥有的桌子进行情绪分析.
我希望每行字符串数据都传递给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) 考虑以下矩阵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) 我有一个包含多个变量(大约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的时间序列图分别在同一变量图中a
和b
在不同图中。
我试过了,ggplot
但是没有用。请帮我
我有一个带ID的记录列表(其中一些是用户名,其中一些是电子邮件地址).我想知道有多少是电子邮件地址.我想一个简单的方法是计算有多少行包含@符号,但是我无法获得一个函数来完成这项工作.任何帮助表示赞赏!
样本数据集:
x <- c("1234@aol.com", "johnnyApple", "tomb@gmail.com")
Run Code Online (Sandbox Code Playgroud) 我觉得这应该很容易,但不知所措,并希望你们都能提供帮助.我有面板数据,通过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)
我觉得这应该很简单,但无法弄清楚一个简单的一线解决方案.
非常感谢!
我有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中是否有任何可以执行类似工作的命令?
r ×10
dplyr ×3
data.table ×1
ggplot2 ×1
lapply ×1
numpy ×1
pandas ×1
panel ×1
plot ×1
python ×1
regex ×1
sapply ×1
scikit-learn ×1
stringi ×1
tableau-api ×1