gpt4 book ai didi

R - 如何对列中的某些行应用不同的函数

转载 作者:行者123 更新时间:2023-12-04 18:45:49 27 4
gpt4 key购买 nike

我试图根据相邻列中字符串的值将不同的函数应用于不同的行。我的数据框如下所示:

type    size
A 1
B 3
A 4
C 2
C 5
A 4
B 32
C 3

我想对类型 A、B 和 C 应用不同的函数,以给出第三列“size2”。例如,假设以下函数适用于 A、B 和 C:
for A: size2 = 3*size
for B: size2 = size
for C: size2 = 2*size

我可以使用此代码分别为每种类型执行此操作
df$size2 <- ifelse(df$type == "A", 3*df$size, NA)
df$size2 <- ifelse(df$type == "B", 1*df$size, NA)
df$size2 <- ifelse(df$type == "C", 2*df$size, NA)

但是,我似乎无法在不删除所有其他值的情况下为所有类型执行此操作。我尝试使用此代码将函数的应用程序限制为仅 NA 的那些值(即保留现有值并仅填充 NA 值),但使用此代码不起作用:
df$size2 <- ifelse(is.na(df$size2), ifelse(df$type == "C", 2*df$size, NA), NA)

有没有人有任何想法?是否可以将某种 AND 语句与“is.na(df$size2)”和“ifelse(df$type ==“C””一起使用?

非常感谢!

最佳答案

这可能更像 R 型(我称我的数据帧为“dat”而不是“df”,因为 df 是一个常用函数。

> facs <- c(3,1,2)
> dat$size2= dat$size* facs[ match( dat$type, c("A","B","C") ) ]
> dat
type size size2
1 A 1 3
2 B 3 3
3 A 4 12
4 C 2 4
5 C 5 10
6 A 4 12
7 B 32 32
8 C 3 6
match函数用于构造索引以提供给提取函数 [ .

关于R - 如何对列中的某些行应用不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com