r - 在R中的函数内使用if语句
问题描述
我正在尝试迭代一组给定的值,其中对于每个新值,循环通过从 1 重新开始来开始添加数字。代码如下所示。
rdt2 <- function(z){
i = 1
k = 1
v = 0
b = z[1]
while (i <= length(z)){
v[i] = z[i]*100 + k
if (v[i] == b){
k = k + 1
}
if (v[i] != b){
b[i] = v[i]
k = 1
}
i = i + 1
}
return(v)
}
此代码会抛出值,但不会抛出递增的值。让 z 为
c(2150L, 2151L, 2151L, 2151L, 2151L, 2151L, 2151L, 2152L, 2153L,
2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2154L,
2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2156L,
2156L, 2156L, 2156L, 2156L, 2156L)
如您所见,有不同频率的数字。我希望每个数字循环以该频率运行以获得新的数字集。这旨在根据 B 列填充 A 列。这是数据
structure(list(V1 = c(2150L, 2151L, 2151L, 2151L, 2151L, 2151L,
2151L, 2152L, 2153L, 2152L, 2152L, 2152L, 2152L, 2152L, 2152L,
2152L, 2152L, 2154L, 2155L, 2155L, 2155L, 2155L, 2155L, 2155L,
2155L, 2155L, 2156L, 2156L, 2156L, 2156L, 2156L, 2156L), V2 = c(1L,
2L, 2L, 2L, 2L, 2L, 2L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L),
V3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA), V4 = c(1L, 12L, 17L, 22L, 25L, 29L, 31L,
6L, 11L, 3L, 5L, 6L, 9L, 14L, 18L, 19L, 24L, 23L, 2L, 4L,
7L, 8L, 15L, 21L, 27L, 28L, 10L, 13L, 16L, 20L, 26L, 30L)), row.names = c(NA,
-32L), class = "data.frame")
现在,如果您看到 V1,则这些值与 V2 一致,这意味着 V1 对于 V2 中的每个唯一值都具有相同的值。现在我想以检查 V2 和 V4 的条件的方式填充 V3。我的意思是,对于 V2 = 2 和 V4 = 12,V3 可以有 215101。因此,有一个循环控制 V2 中的值发生的次数,但是有一个增量,并且循环重新启动以获取 V2 中的下一个唯一值。
解决方案
您没有准确地说出您想要什么输出,但我猜您正试图通过乘以 100 并添加该重复值的计数器来提供与具有重复的输入相对应的唯一值。也许你想要这样的东西
rdt2a <- function(z){
v = numeric(length(z))
uniquez = unique(z)
freqz = numeric(length(uniquez))
for (i in 1:length(z)){
n = which(uniquez == z[i])
freqz[n] = freqz[n] + 1
v[i] = z[i] * 100 + freqz[n]
}
return(v)
}
z = c(2150L, 2151L, 2151L, 2151L, 2151L, 2151L, 2151L, 2152L, 2153L,
2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2152L, 2154L,
2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2155L, 2156L,
2156L, 2156L, 2156L, 2156L, 2156L)
rdt2a(z)
# [1] 215001 215101 215102 215103 215104 215105 215106 215201 215301 215202
# [11] 215203 215204 215205 215206 215207 215208 215209 215401 215501 215502
# [21] 215503 215504 215505 215506 215507 215508 215601 215602 215603 215604
# [31] 215605 215606
推荐阅读
- c++ - C ++尝试添加>>运算符重载到模板
- javascript - Datatable onclick 执行自定义函数
- ios - 集合视图 - 如何在每个部分中仅选择一个单元格
- python - 如果值匹配,则通过 DataFrame 设置 pandas DataFrame 的子集
- excel - excel放序列号但跳过两行
- java - 比较liferay 7.2 freemake中的两个字符串
- python - jmespath 选择第一个匹配的属性
- android - 我无法通过单击按钮切换到另一个活动?我必须模拟多活动
- python - 如何在给定点之间添加随机点?
- amazon-web-services - 将 Cloud Custodian 输出 json 文件传输到 S3