,我需要帮助将python代码转换为R代码。
我有一个数据框df,其中包含列IndicatorOfDefault,我想生成一个名为indvalues的列。
示例:
row number IndicatorOfDefault indvalues
823602 P 0
823603 P 0
823604 N1,N13, 8
823605 N1, 1
823606 P 0
823607 N1,N2,N3,N9,N10, 13
823608 P 0
我要转换的代码如下:
df['indicators'] = df['IndicatorOfDefault'].str.split(',')
Nvalues = {'' : -1, 'P' : 0, 'N1' : 1, 'N2' : 2, 'N11' : 3, 'N12' : 4, 'N3' : 5, 'N4' : 6,
'N6' : 7, 'N10' : 8, 'N13' : 9, 'N5' : 10, 'N7' : 11, 'N8': 12, 'N9' : 13}
df['indvalues'] = df['indicators'].apply(lambda x: max([Nvalues.get(y,y) for y in x ]))
我想在R中执行相同的代码,但我不知道如何在R中编写它。
有人可以帮我吗?
提前致谢
为什么这个问题不在话题?我不明白什么是错的......我是这个网站的新手,所以如果有人能解释为什么这个具体问题不属于这里,我将不胜感激?我已经阅读了帮助中心写的内容,但我仍然不知道出了什么问题。
我设法以不同的方式解决了我的问题。我得到了我想要的结果 - 最重要的指标(它不需要是必要的数字)。
df$ind <- "P"
for(i in c(1, 2, 11, 12, 3, 4, 6, 10, 13, 5, 7, 8, 9)){
df <- transform(df, ind = ifelse(grepl(as.character(paste0("N",i,",")),IndicatorOfDefault),as.character(paste0("N",i)),ind))
}
示例:
row number IndicatorOfDefault ind
823602 P P
823603 P P
823604 N1,N13, N13
823605 N1, N1
823606 P P
823607 N1,N2,N3,N9,N10, N9
823608 P P
答案 0 :(得分:0)
由于R没有字典对象,因此最佳翻译将是命名列表。请注意:R不允许零长度名称,因此使用 N0 。从那里你可以使用R vapply()
和strsplit()
对字符串进行字符串拆分并找到相应的最大值。具体而言,vapply()
而不是标准lapply()
用于将输出类型指定为dataframe列的数字向量。
下面包含两个脚本,用于显示使用已发布数据的精确结果列呈现。
<强>的Python 强>
from io import StringIO
import pandas as pd
data = '''row number;IndicatorOfDefault;indvalues
823602;P;0
823603;P;0
823604;N1,N13,;8
823605;N1,;1
823606;P;0
823607;N1,N2,N3,N9,N10;13
823608;P;0'''
df = pd.read_table(StringIO(data), sep=";")
df['indicators'] = df['IndicatorOfDefault'].str.split(',')
Nvalues = {'' : -1, 'P' : 0, 'N1' : 1, 'N2' : 2, 'N11' : 3, 'N12' : 4, 'N3' : 5, 'N4' : 6,
'N6' : 7, 'N10' : 8, 'N13' : 9, 'N5' : 10, 'N7' : 11, 'N8': 12, 'N9' : 13}
df['result'] = df['indicators'].apply(lambda x: max([Nvalues.get(y,y) for y in x ]))
print(df)
# row number IndicatorOfDefault indvalues indicators result
# 0 823602 P 0 [P] 0
# 1 823603 P 0 [P] 0
# 2 823604 N1,N13, 8 [N1, N13, ] 9
# 3 823605 N1, 1 [N1, ] 1
# 4 823606 P 0 [P] 0
# 5 823607 N1,N2,N3,N9,N10 13 [N1, N2, N3, N9, N10] 13
# 6 823608 P 0 [P] 0
<强> - [R 强>
data = 'row number;IndicatorOfDefault;indvalues
823602;P;0
823603;P;0
823604;N1,N13,;8
823605;N1,;1
823606;P;0
823607;N1,N2,N3,N9,N10;13
823608;P;0'
df = read.table(text=data, sep=";", header=TRUE, stringsAsFactors = FALSE)
Nvalues = list(N0=-1, P=0, N1=1, N2=2, N11=3, N12=4,
N3=5, N4=6, N6=7, N10=8, N13=9, N5=10,
N7=11, N8=12, N9=13)
df$indicators <- lapply(df$IndicatorOfDefault, function(i) {
as.character(strsplit(i, ",")[[1]])
})
df$result <- vapply(df$indicators, function(i) {
max(as.numeric(Nvalues[i]))
}, numeric(1))
df
# row.number IndicatorOfDefault indvalues indicators result
# 1 823602 P 0 P 0
# 2 823603 P 0 P 0
# 3 823604 N1,N13, 8 N1, N13 9
# 4 823605 N1, 1 N1 1
# 5 823606 P 0 P 0
# 6 823607 N1,N2,N3,N9,N10 13 N1, N2, N3, N9, N10 13
# 7 823608 P 0 P 0