我试图根据同一行中其他列的响应在数据框中创建一个新列。
我找到的大多数解决方案都是数字,而我的情况是角色。我想创建一个新列,如果该行中的任何观察结果为“ Detected”,则显示为“ Detected”,如果没有观察结果为“ Detected”,那么我希望新列响应为“ Negative”。在下面的情况下,我希望第1行(ID 1)具有第4列(Test4),该列基于“检测到”的响应显示为“检测到”
ID <- c(1, 2, 3, 4)
Test1 <- c("Detected", "Not Detected", "Detected", "Detected")
Test2 <- c("Detected", "Not Detected", "Detected", "Detected")
Test3 <- c("Not Detected", "Detected", "Not Detected", "Not Detected")
df = data.frame(ID, Test1, Test2, Test3)
ID Test1 Test2 Test3
1 Detected Detected Not Detected
2 Not Detected Not Detected Detected
3 Detected Detected Not Detected
4 Detected Detected Not Detected
答案 0 :(得分:3)
您可以这样做:
gopkg.in/mgo.v2
输出:
df$Test4 <- ifelse(rowSums(df == "Detected") > 0,
"Detected",
"Negative")
如果上述方法不起作用,则说明您的字符串结构可能有问题(例如,周围可能还有其他空格或其他字符)。
如果您发布数据的原始示例,将会有所帮助。您也可以尝试:
ID Test1 Test2 Test3 Test4
1 1 Detected Detected Not Detected Detected
2 2 Not Detected Not Detected Detected Detected
3 3 Detected Detected Not Detected Detected
4 4 Detected Detected Not Detected Detected
这意味着匹配的行不需要100%对应于df$Test4 <- ifelse(
apply(df, 1, function(x) any(grepl("^(?!.*Not).*Detected.*$", x, perl = T))),
"Detected",
"Negative"
)
(没有任何空格等),但是只需要出现在某个地方-没有Detected
部分。 / p>
答案 1 :(得分:0)
对于此解决方案,请重写您的df并进行如下突变:
method BubbleSort(arr: array<int>)
ensures forall k, k' :: 0 <= k < k' < arr.Length ==> arr[k] <= arr[k']
modifies arr
{
var i := arr.Length;
while i > 0
invariant 0 <= i <= arr.Length
// Violating the invariant next line
invariant forall k, k' :: i <= k < k' < arr.Length ==> arr[k] <= arr[k']
decreases i
{
var j := 0;
while j < i - 1
invariant 0 <= j < i
invariant forall k :: 0 <= k < j ==> arr[j] >= arr[k]
decreases i - j
{
if arr[j] > arr[j+1] {
arr[j], arr[j+1] := arr[j+1], arr[j];
}
j := j + 1;
}
i := i - 1;
}
}
希望这会有所帮助!