小编Pet*_*hen的帖子

ifelse with data.table

这是我的数据:

BuyDate       SellDate     Number
2015-01-01    NA           1
2015-01-01    2015-01-03   1
2015-01-01    2015-01-03   -1
2016-12-09    NA           -1
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列Start,所以我可以得到以下结果.

BuyDate       SellDate     Number    Start
2015-01-01    NA           1         2015-01-01
2015-01-01    2015-01-03   1         2015-01-01
2015-01-01    2015-01-03   -1        2015-01-03
2016-12-09    NA           -1        2016-12-09
Run Code Online (Sandbox Code Playgroud)

代码是:

data[,Start:=ifelse(Number=="1",BuyDate,ifelse(is.na(SellDate),BuyDate,SellDate))]
Run Code Online (Sandbox Code Playgroud)

但是,我得到:

BuyDate       SellDate     Number    Start
2015-01-01    NA           1         1420070400
2015-01-01    2015-01-03   1         1420070400
2015-01-01    2015-01-03   -1        1420243200
2016-12-09    NA           -1        1481241600
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

str(data)
Classes ‘data.table’ and 'data.frame':
 $BuyDate : POSIXct, format: "2015-01-01" "2015-01-01" "2015-01-01" "2016-12-09"
 $SellDate: POSIXct, format: NA …
Run Code Online (Sandbox Code Playgroud)

if-statement r date data.table

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

data.table在多列上长到宽

我有一个关于data.table' meltdcast多列的问题.我在StackOverFlow上浏览过,但很多类似的帖子都不是我想要的.我将在下面解释.

首先,data是关于问题的原因和价值量.这是我的一部分data:

ID   Type    Problem1    Value1     Problem2    Value2    Problem3    Value3
1    A       X           500        Y           1000      Z           400
2    A       X           600        Z           700       
3    B       Y           700        Z           100
4    B       W           200        V           200
5    C       Z           500        V           500       
6    C       X           1000       W           100       V           900
Run Code Online (Sandbox Code Playgroud)

第二,ID是独一无二的.Type包含三个(A,B,和C).有5个问题.

ID == 1作为一个例子.这是Type A …

r data.table

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

Python 搜索字符串包含字符

我有以下数据:

col1      
086945159
549615853
589ac2546
GED456231
F56hy8W12
Run Code Online (Sandbox Code Playgroud)

我想查找是否col有非数字值并返回。

col1         col2 
086945159    086945159
549615853    549615853
589ac2546    Nan
GED456231    Nan
F56hy8W12    Nan
111111111    Nan
222222222    Nan
Run Code Online (Sandbox Code Playgroud)

re.search(r'[^0-9]+', str)以前找过。但是,我如何在 in 中使用它,apply()因为如果 incol中的值具有相同的数字,例如11111111and 222222222,则这应该返回Nan.

python regex data-manipulation pandas python-re

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

基于另一个 data.table 的 data.table 映射

我有两个data( .xlsx),DT1DT2. 我想创建一个新列newcolDT1基础上的原始列DT1,映射在列DT2
我知道这是模棱两可的,所以我在这里解释更多:
首先,这是我的两个数据。

DT1
code    type  
AH1     AM
AS5     AM
NMR     AM
TOS     AM
IP      AD
CC      ADCE
CA      Wa

DT2
code    year   month  
AH1     2011   2
AH1     2011   5
AS5     2012   7
AS5     2012   6
AS5     2013   3
CC      2014   6
CA      2016   11
Run Code Online (Sandbox Code Playgroud)

其次, in DT2、 columnyearmonth在这个问题中并不重要。我们不需要考虑它。
三、我想要的结果是:

DT2
code    year   month   newcol
AH1     2011   2 …
Run Code Online (Sandbox Code Playgroud)

r dataframe data.table

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

R计算月末

我对日期结束有疑问,我将在下面解释.
这是我的示例数据:

DATE
2015-01-01
2015-02-05
2015-09-29
2016-02-07
2016-07-24
2016-12-16
Run Code Online (Sandbox Code Playgroud)

我知道如果我想要那个月的总天数,代码是:

days_in_month(DATE)
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是如下:

DATE            DATE_Month_End
2015-01-01      2015-01-31
2015-02-05      2015-02-28
2015-09-29      2015-09-30
2016-02-07      2016-02-29
2016-07-24      2016-07-31
2016-12-16      2016-12-31
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

r date

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

将值分配到特定范围

我有一个简单的问题要弄清楚:

value
1000
2500
5080
10009
Run Code Online (Sandbox Code Playgroud)

我想指定value一个间隔:

value    Range
1000     0-1000
2500     1001-5000
5080     5001-10000
10009    10001-20000
Run Code Online (Sandbox Code Playgroud)

我尝试这样:

dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value < 5001, "1001-5000", ifelse(5000 < value < 10001, "5001-10000", "10001-20000")))
Run Code Online (Sandbox Code Playgroud)

但是,我得到了 Error: unexpected '<' in "dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value <"

有什么帮助吗?

编辑:

这个问题并不要求将连续变量转换为因子的最佳方法。它要求可复制示例的调试帮助:

library(data.table)
dt <- data.table(value = c(1000, 2500, 5080, 10009))
dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value < 5001, …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

Pandas 用数字字符串对列进行排序

我有一个下面的数据框:

col1

Numb10
Numb11
Numb12
Numb7
Numb8
Run Code Online (Sandbox Code Playgroud)

如何按数字顺序排序:

col1

Numb7
Numb8
Numb10
Numb11
Numb12
Run Code Online (Sandbox Code Playgroud)

我尝试过但出现错误TypeError: cannot convert the series to <class 'int'>

df.sort_values(by = "col1", key = (lambda x: int(x[4:])))
Run Code Online (Sandbox Code Playgroud)

更新一下,缺了一个col1

python sorting pandas

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