小编Ric*_*c S的帖子

在 dplyr 中使用动态位置数创建滞后/超前变量

我正在寻找一种方法来生成从具有动态位置数(参数n)的滞后列派生的列,这意味着这个新列应该将n存储在另一列中的值作为参数(请参阅lag函数文档)。

样本数据:

set.seed(42)
df <- as_tibble(data.frame(
  id = c(rep(1,6), rep(2,5), rep(3,6)),
  n_steps = c(0,0,0,0,1,2,0,0,1:3,0,1:5),
  var1 = sample(1:9, 17, replace = TRUE),
  var2 = runif(17, 1, 2)))

# A tibble: 17 x 4
      id n_steps  var1  var2
   <dbl>   <dbl> <int> <dbl>
 1     1       0     1  1.08
 2     1       0     5  1.51
 3     1       0     1  1.39
 4     1       0     9  1.91
 5     1       1     4  1.45
 6     1       2     2  1.84
 7     2       0     1 …
Run Code Online (Sandbox Code Playgroud)

r lag dplyr

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

在 Python 中重新编码类似于 R ifelse 的变量

我只是 Python 新手,正在尝试进行分析。但在此之前,我想重新编码一些变量。我想知道这个 R 代码在 Python 中是否有等价物。

df$col1 <- ifelse(df$col1 == "yes", 1, 0)
Run Code Online (Sandbox Code Playgroud)

df是一个pandas.DataFrame并且col1是它的一列。

python numpy r dataframe recode

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

Python:根据其他两列的值有条件地创建新列

我想在一个新列中合并两列。

假设我有:

Index A B
0     1 0
1     1 0
2     1 0
3     1 0
4     1 0
5     1 2
6     1 2
7     1 2
8     1 2
9     1 2
10    1 2
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个 C 列,其中包含从索引 0 到 4 的条目以及从索引 5 到 10 的 B 列的条目。它应该如下所示:

Index A B C
0     1 0 1
1     1 0 1
2     1 0 1
3     1 0 1
4     1 0 1
5     1 2 2
6 …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

使用 dplyr 获取单个变量的平均值

我正在使用钻石数据集,并试图找到每种切工的平均价格。我以为这会起作用

diamonds_data %>%
  filter(Cut == 'Ideal') %>%
  mean(Price)
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告消息:

[1] NA
Warning message:
In mean.default(., diamonds_data, Price) :
  argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)

r mean dataframe dplyr

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

pyspark - 使用 OR 条件连接

如果至少满足两个条件之一,我想加入两个 pyspark 数据帧。

玩具数据:

df1 = spark.createDataFrame([
    (10, 1, 666),
    (20, 2, 777),
    (30, 1, 888),
    (40, 3, 999),
    (50, 1, 111),
    (60, 2, 222),
    (10, 4, 333),
    (50, None, 444),
    (10, 0, 555),
    (50, 0, 666)
    ],
    ['var1', 'var2', 'other_var'] 
)

df2 = spark.createDataFrame([
    (10, 1),
    (20, 2),
    (30, None),
    (30, 0)
    ],
    ['var1_', 'var2_'] 
)
Run Code Online (Sandbox Code Playgroud)

我想维护所有那些存在于 的不同值中的行df1var1或者df2.var1_ 存在 var2于 的不同值中的所有行df2.var2_(但不是在该值为 0 的情况下)。

因此,预期输出将是

+----+----+---------+-----+-----+
|var1|var2|other_var|var1_|var2_|
+----+----+---------+-----+-----+
|  10|   1| …
Run Code Online (Sandbox Code Playgroud)

python join dataframe apache-spark pyspark

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

传递字符串进行变异

我已经在SO上寻找此问题的答案,但是没有找到解决我问题的方法。

我有一个包含几列的数据框,每列至少有一个不适用。这些列的名称存储在character vector中vars_na。对于每一个,我想创建一个虚拟变量,如果缺少该观察值,则取值为0,否则取值为1。

下面有一个可重现的玩具示例以及我到目前为止使用的代码:

# creation of toy dataset
iris[1:5, 1] <- rep(NA, 5)
iris[1:10, 4] <- rep(NA, 10)
vars_na <- c("Sepal.Length", "Petal.Width")

for(var in vars_na){
  iris <- iris %>% 
    mutate(dummy = ifelse(is.na(!!var), 0, 1)) %>% 
    rename_at(c("dummy"), list(~paste0("dummyna_", var)))
# 'rename_at' is just to differentiate between the several dummies created, 
# and it works correctly
}
Run Code Online (Sandbox Code Playgroud)

问题在于,新创建的虚拟变量导致矢量充满1,因此它们没有正确考虑缺失值。确实:

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species dummyna_Sepal.Length dummyna_Petal.Width
1           NA         3.5          1.4          NA  setosa                    1                   1
2           NA         3.0          1.4          NA …
Run Code Online (Sandbox Code Playgroud)

r dplyr mutate tidyeval

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

从列表中删除相邻重复项的组,同时保留顺序

有很多类似的问题(比如这个),但我没有找到任何适合我需求的问题。

我的目标是从列表中删除相邻重复项的组。
例如,如果我的清单是

['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'A', 'C', 'C']
Run Code Online (Sandbox Code Playgroud)

我想要的输出是

['A', 'B', 'C', 'A', 'C']
Run Code Online (Sandbox Code Playgroud)

即每组相邻的重复项都被删除,只保留其中的一组。


到目前为止,我的代码涉及一个带有条件的for循环:

def reduce_duplicates(l):
    
    assert len(l) > 0, "Passed list is empty."
    
    result = [l[0]]   # initialization
    
    for i in l:
        if i != result[-1]:
            result.append(i)
    
    return result


l = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'A', 'C', 'C']
print(reduce_duplicates(l))
# ['A', 'B', 'C', 'A', 'C']
Run Code Online (Sandbox Code Playgroud)

它产生了预期的输出,但我认为有一种原生的、优化的和优雅的方式来实现相同的结果。这是真的吗?

python list duplicates

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

用 NA 替换 0 而不更改类

有没有办法在asd$b == "b"不改变 asd 类的情况下用 NA 替换 0

> asd <- data.frame(a = c(1,0,0), b = c("a","b","c"))
> asd
  a b
1 1 a
2 0 b
3 0 c
Run Code Online (Sandbox Code Playgroud)

我在下面尝试过,但失败了

asd$a <- ifelse(asd$a[asd$b == "b"] == 0, "NA", asd$a[asd$b == "b"])
Run Code Online (Sandbox Code Playgroud)

预期输出

> asd
  a   b
1 1   a
2 NA  b
3 0   c
Run Code Online (Sandbox Code Playgroud)

仍然预期输出的类别应该是数字

r vector na

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

标签 统计

r ×5

dataframe ×4

python ×4

dplyr ×3

numpy ×2

apache-spark ×1

duplicates ×1

join ×1

lag ×1

list ×1

mean ×1

mutate ×1

na ×1

pandas ×1

pyspark ×1

recode ×1

tidyeval ×1

vector ×1