我想知道是否有办法根据向量中的位置提取一个值,所以例如我有一个带有两个向量的数据框,我将它们从原始的V1和V2分组,就像一个ORDER在SQL中的BY.当我尝试按V1组类型获得第3分钟时出现问题.
有序数据框......
V1 V2
Ford 18
Ford 16
Ford 15
Ford 14
Ford 12
**Ford 5**
Ford 2
Ford 1
Nisan 10
Nisan 9
Nisan 8
Nisan 7
Nisan 6
**Nisan 5**
Nisan 4
Nisan 3
Toyota 20
Toyota 19
Toyota 15
Toyota 12
Toyota 11
**Toyota 10**
Toyota 6
Toyota 2
Run Code Online (Sandbox Code Playgroud)
结果我想在新数据框中,每个变量的第3分钟值...
V1 V2
Ford 5
Nisan 5
Toyota 10
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我提到过:
所有示例都基于测试数字向量或其他列中的NA并添加新变量.这是一个简短的可重现的例子:
x <- c("dec 12", "jan 13", "feb 13", "march 13", "apr 13", "may 13",
"june 13", "july 13", "aug 13", "sep 13", "oct 13", "nov 13")
y <- c(234, 678, 534, 122, 179, 987, 872, 730, 295, 450, 590, 312)
df<-data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)
我想为df$x= dec | 添加"winter" jan | feb,"spring"for march | apr | may,"summer"和"autumn".
我试过了
df$season <- ifelse(df[1:3, ], "winter", ifelse(df[4:6, ], "spring",
ifelse(df[7:9, ], "summer", "autumn")))
Run Code Online (Sandbox Code Playgroud)
我知道这是一种非常低效的做事方式,但我是一个新手和一个kludger.它返回了错误:
Error in ifelse(df[1:3, …Run Code Online (Sandbox Code Playgroud) for-loop r calculated-columns conditional-statements dataframe
我的类字符数据框中有一个local.time列,其中包含如下元素:
> a$local.time
[1] "1:30 AM" "6:29 AM" "6:59 AM" "9:54 AM" "10:14 AM" "10:34 AM" "12:54 PM" "1:15 PM" "1:20 PM"
[10] "1:20 PM" "2:15 PM" "2:15 PM" "4:23 AM" "6:28 AM" "2:45 PM" "3:08 PM" "3:23 PM" "3:58 PM"
Run Code Online (Sandbox Code Playgroud)
我想将它们从类字符转换为时间变量.所以我用过:
> as.POSIXct(a$local.time, tz = "", format = "%I:%M %p", usetz = FALSE)
Run Code Online (Sandbox Code Playgroud)
这导致:
[1] "2014-10-31 01:30:00 EDT" "2014-10-31 06:29:00 EDT" "2014-10-31 06:59:00 EDT" "2014-10-31 09:54:00 EDT"
[5] "2014-10-31 10:14:00 EDT" "2014-10-31 10:34:00 EDT" "2014-10-31 12:54:00 EDT" "2014-10-31 13:15:00 …Run Code Online (Sandbox Code Playgroud) 如果满足条件,我想用x替换x中字符串的第一个元素:如果x中的第一个元素"101"与y中的第一个字符串匹配,则将第一个元素"101"替换为空白.
x = c("101", "201", "301")
y = c("1", "7", "3")
Run Code Online (Sandbox Code Playgroud)
想:
> x
[1] "01" "201" "01"
Run Code Online (Sandbox Code Playgroud)
我在努力:
> ifelse(substr(x, 1, 1) == y, sub(substr(x, 1, 1), ""), x)
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的,虽然不直观 - sub需要一个模式作为第一个参数而不会采取substr.
还尝试过:
> ifelse(substr(x, 1, 1) == y, substr(x, 1, 1) <- "", x)
[1] "" "201" ""
Run Code Online (Sandbox Code Playgroud)
我引用了这个R:我怎样才能代替字符串中的第5个元素?并使用以下方法解决
ifelse(substr(x, 1, 1) == y, paste(substr(x, 2, nchar(x))), x)
Run Code Online (Sandbox Code Playgroud)
想知道是否有更好的方法吗?
我正在跟踪Nathan Dannerman和Richard Heimann撰写的来自R的Social Media Mining中的文本挖掘示例:The Book。使用拉鸣叫后searchTwitter的功能,笔者采用sapply的list提取这样的文字部分:
rstats <- searchTwitter("#rstats", n = 1000)
rstats_list <- sapply(rstats, function (x) x$getText())
整齐地制作一个字符矢量,其中仅包含来自推文的文本部分。什么是getText()?我在任何地方都找不到任何东西-作者没有充分解释。我看了看tm包装文件-什么都没有!我在SO上寻找与此相关的问题- 从推文中获取文本回答者在问与我相同的问题。在Inside-R中,我发现了这一点:http : //www.inside-r.org/r-doc/base / gettext,但与getText。有人可以解释我所缺少的吗?
我有一个包含145个rowns和1000多列的数据框.
对于每一行,我想提取第95百分位数的值,但仅计算大于或等于1的数据.
考虑到所有数据,我设法计算每一行的值,如下所示:
p95.obs <- apply(obs,1,quantile,probs=c(.95))
Run Code Online (Sandbox Code Playgroud)
包括我尝试的大于选项
p95.obs <- apply(obs>=1,1,quantile,probs=c(.95))
Run Code Online (Sandbox Code Playgroud)
但是这样我每行只获得1.
我试图找到pandas相当于这个问题.
我想在下面的数据框中添加一个新列,这是每行中最低值的列名.
Multi-Use Charging Performer Controls Value for Money All Rounder
0 1.569541 0.290916 2.396734 0.881500 3.171563 1.950175
1 0.906542 2.296172 0.162809 1.604936 0.730633 0.532835
2 0.442924 0.970764 1.264364 0.295140 2.034826 0.824529
3 0.167663 1.367973 0.877306 0.683562 1.653964 0.444136
4 0.870290 0.547844 1.703054 0.209975 2.476787 1.260371
Run Code Online (Sandbox Code Playgroud)
得到min很简单: df.iloc[:, 0:6].min(axis=1)
如何根据min返回列名?
一个非常基本的问题。我有一个包含 14 个变量和 576 个观察值的数据框。
> head(Boston)
crim zn indus chas nox rm age dis rad tax ptratio black lstat medv
1 0.00632 18 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
2 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
3 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
4 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 …Run Code Online (Sandbox Code Playgroud) 我想从多个字符向量中删除多个模式。目前我要去:
a.vector <- gsub("@\\w+", "", a.vector)
a.vector <- gsub("http\\w+", "", a.vector)
a.vector <- gsub("[[:punct:]], "", a.vector)
Run Code Online (Sandbox Code Playgroud)
等等等等
这很痛苦。我正在看这个问题和答案:R: gsub, pattern = vector and replacement = vector但它没有解决问题。
themapply和 themgsub都没有工作。我做了这些载体
remove <- c("@\\w+", "http\\w+", "[[:punct:]]")
substitute <- c("")
Run Code Online (Sandbox Code Playgroud)
既不mapply(gsub, remove, substitute, a.vector)也不mgsub(remove, substitute, a.vector) worked.
a.vector 看起来像这样:
[4951] "@karakamen: Suicide amongst successful men is becoming rampant. Kudos for staing the conversation. #mental"
[4952] "@stiphan: you are phenomenal.. #mental #Writing. httptxjwufmfg"
Run Code Online (Sandbox Code Playgroud)
我想要:
[4951] "Suicide …Run Code Online (Sandbox Code Playgroud) 我不需要任何的智能 rbind,如rbindlist,rbind.fill,bind_row等.
我需要一个哑巴rbind才能简单地绑定两个数据帧:
> a <- data.frame(a = 1:3)
> b <- data.frame(b = 1:2)
> some.magic.bind(a, b) # what function to use here?
a b
1 1 1
2 2 2
3 3 NA
Run Code Online (Sandbox Code Playgroud) 我有一个带有6个选项卡(工作表)的excel文件.每个工作表具有相同的结构并包含两列 - Col 1包含品牌名称,Col 2包含与每个品牌对应的值.对于excel文件中的每个工作表,我想制作一个饼图,显示每个品牌的%份额.
这个例子XLS文件,你可以用它来运行该脚本上是这里
我写的代码非常简单,并生成图表.问题是图表的图例采用序列号名称而不是品牌名称.
import pandas as pd
import xlsxwriter as excel
df = pd.read_excel("/Users/jack/Documents/python-pptx/filename", sheetname=None)
workbook = excel.Workbook('/Users/jack/Documents/python-pptx/chart_pie.xlsx')
for sheetname, data in df.iteritems():
if len(data) > 0:
worksheet = workbook.add_worksheet(sheetname)
chart = workbook.add_chart({'type': 'pie'})
worksheet.write_column('A1', data['Brand'])
worksheet.write_column('B1', data['Share_of_interactions'])
chart.add_series({'categories': '='+sheetname+'!$A$1:$A$'+str(len(data)),
'values': '='+sheetname+'!$B$1:$B$'+str(len(data)),
'name': '='+sheetname+'!$A$1:$A$'+str(len(data))})
## insert chart into the worksheet
worksheet.insert_chart('C3', chart)
## Close the workbook
workbook.close()
Run Code Online (Sandbox Code Playgroud)
这是图表的屏幕截图:
如果您在图表中注意到图例中的1,2,3 .. .7.它实际应该是品牌名称.我已经添加了名称参数chart.add_series作为文档中提到的xlsxwriter- http://xlsxwriter.readthedocs.io/chart.html.任何帮助将非常感激.
这将是愚蠢的.
我有一个字符串:
word <- "dirtyboards.csv"
Run Code Online (Sandbox Code Playgroud)
我想删除csv部分并获得"脏板".
我在尝试:
require(stringr)
str_extract(word, ".*[^.csv]")
Run Code Online (Sandbox Code Playgroud)
我得到了回报:"脏板".".csv"之前的"s"丢失了.
我知道我能做到
gsub(".csv", "", word)