我正在寻找一种方法来生成从具有动态位置数(参数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) 我只是 Python 新手,正在尝试进行分析。但在此之前,我想重新编码一些变量。我想知道这个 R 代码在 Python 中是否有等价物。
df$col1 <- ifelse(df$col1 == "yes", 1, 0)
Run Code Online (Sandbox Code Playgroud)
这df
是一个pandas.DataFrame
并且col1
是它的一列。
我想在一个新列中合并两列。
假设我有:
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) 我正在使用钻石数据集,并试图找到每种切工的平均价格。我以为这会起作用
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) 如果至少满足两个条件之一,我想加入两个 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)
我想维护所有那些存在于 的不同值中的行df1
,var1
或者df2.var1_
存在 var2
于 的不同值中的所有行df2.var2_
(但不是在该值为 0 的情况下)。
因此,预期输出将是
+----+----+---------+-----+-----+
|var1|var2|other_var|var1_|var2_|
+----+----+---------+-----+-----+
| 10| 1| …
Run Code Online (Sandbox Code Playgroud) 我已经在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) 有很多类似的问题(比如这个),但我没有找到任何适合我需求的问题。
我的目标是从列表中删除相邻重复项的组。
例如,如果我的清单是
['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)
它产生了预期的输出,但我认为有一种原生的、优化的和优雅的方式来实现相同的结果。这是真的吗?
有没有办法在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)
仍然预期输出的类别应该是数字